【问题标题】:Properly reading a nested XML document using an XmlReader.ReadInnerXML in .NET 3.5在 .NET 3.5 中使用 XmlReader.ReadInnerXML 正确读取嵌套的 XML 文档
【发布时间】:2009-11-24 03:10:58
【问题描述】:

我正在使用 XmlReader.ReadInnerXML 来读取嵌入在外部 XML 文档元素中的 XML 文档(作为文本)。除了在内部 XML 的属性中处理制表符之外,这工作正常。示例:

<document>
  <interface>
    <scriptaction script="&#x9;one tab&#xD;&#xA;&#x9;&#x9;two tabs&#xD;&#xA;&#x9;&#x9;&#x9;three tabs" />
  </interface>
</document>

在“文档”元素级别使用 ReadInnerXML 时,生成的字符串如下所示:

<interface><scriptaction script=" one tab&#xD;&#xA;  two tabs&#xD;&#xA;   three tabs"/></interface>

IOW,制表符变成了实际的制表符。然后当我们解析生成的内部文档时,制表符在通常的空白处理方式中被规范化为空格,结果是将制表符转换为空格。我们需要保持属性值不变。

我们尝试过使用各种 XmlReader 设置,但均无济于事。这可能是阅读器的缺陷,还是我们做错了什么?

提前致谢,

-- 内森艾伦 - 数据库咨询组

【问题讨论】:

    标签: .net nested tabs xmlreader


    【解决方案1】:

    恐怕这种行为是 XML 规范所要求的:http://www.w3.org/TR/REC-xml/#AVNormalize

    您是否控制 XML 生成?您可以改用 CDATA 部分吗?

    【讨论】:

    • 我认为你是对的,尽管我认为这在 XML 的众多缺点中占很大比重。我确实可以控制新文档的生成,但必须采取措施以向后兼容旧文档。无论如何,谢谢!
    • 如果您控制生成,CDATA(或者甚至更喜欢元素而不是属性来获取此信息)是您想要确保内容不受干扰地通过 XML 解析器的内容。我怀疑属性值规范化规则的存在是为了确保兼容的解析器对等价内容的行为方式都相同,这样在处理空白时就不会出现特定于平台的意外。
    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    相关资源
    最近更新 更多