【问题标题】:Parsing an XMl that contains "£"解析包含“£”的 XML
【发布时间】:2011-06-24 22:40:39
【问题描述】:

我正在解析一个格式不正确的 xml 文档,其中包含“&”,并且解析不正确,因为节点中有“&”。

例如<abcnode>£70.00-£90.00</abcnode>

当我尝试获取此节点的值时,它返回“70.00-”。

我无法控制这个 xml,所以我必须解析这个格式错误的 xml。

我正在使用XmlTextReader reader = new XmlTextReader(url); 从 url 加载 xml。

我可以用 xml 替换 £ 来解决我的问题,但是这个 xml 可能非常大,所以我不想下载文件来替换无效字符(出于性能原因)。

有没有办法使用XmlTextReader解析这个xml?

【问题讨论】:

  • 我讨厌挑剔,但没有“格式不正确的 xml 文档”之类的东西。如果它的格式不正确,那么它就不是 XML。如果有实体£ 的定义,则文档是格式良好的XML;如果没有这样的定义,那么它的格式不正确,也不是 XML。

标签: c# xml


【解决方案1】:

XmlTextReader 将采用 TextReader 参数进行读取,因此您可以实现一个继承 TextReader 的类,覆盖所有 ReadXXX() 方法并修复覆盖中的无效字符。

编辑 或者,您可以破解 XML 的 DOCTYPE,因为它被读取以添加 <!ENTITY pound "£">,这应该使文档的其余部分格式正确。可能还有另一个技巧可以将实体添加到XmlTextReader 本身而无需修改 XML,但我不知道。

【讨论】:

    【解决方案2】:

    我想知道您是否正确地说这不是格式正确的?也许它解析正确但构建了一个 DOM 树,其中实体显式显示为节点,而您的应用程序代码忽略了实体节点?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 2018-12-30
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多