有没有办法让 XmlReader 将字符引用保留为文本而不是转换它?

Posted

技术标签:

【中文标题】有没有办法让 XmlReader 将字符引用保留为文本而不是转换它?【英文标题】:Is there a way to have an XmlReader preserve a character reference as text rather than converting it? 【发布时间】:2020-07-11 21:32:10 【问题描述】:

我正在使用 xml 阅读器来解析一些 xml,我想知道是否可以让它在字符实体引用中作为纯文本读取,而不是将其转换为实际字符。因此,如果我在节点上调用 ReadInnerXml():

<param name="id">don&apos;t convert this</param> 

我会得到“don&amp;apos;t convert this”,而不是我目前得到的“don't convert this”。这是必要的,因为任何字符或字符实体引用都应按原样返回,因为它们是遗留内容。

任何帮助表示赞赏!

【问题讨论】:

ReadInnerXml() 是我正在使用的,但它会自动将引用转换为字符。我希望 XmlReaderSettings 中可能有一些东西,但目前没有找到任何东西。 您不能在 xml 文件中发送撇号,因此您必须转换为 '见维基:en.wikipedia.org/wiki/Character_encodings_in_html @jdweng 这完全不正确。 XML 中的文字撇号不需要转义,并且在任何情况下&amp;apos; 都不能作为内置实体使用。您的参考是 HTML,而不是 XML。 @Michael Kay:阅读链接:“XML 字符引用” 好吧,我错了一半(但你完全错了)。 &amp;apos; 在 XML 中始终可用,但从不需要它,因为普通的撇号字符在所有上下文中都有效,除了由撇号分隔的属性值(这种情况很少见且可以避免)。 【参考方案1】:

不,我不知道任何具有此功能的 XML 解析器。 XML 解析器的工作是解析输入,这就是它要做的事情。

如果您无法修复此过程的使用者以正确处理 XML,则最好的办法是通过将 &amp; 替换为(例如)§ 来预处理文本,因此这对XML 解析器。

【讨论】:

这就是我的想法,不幸的是,就改变流程而言,无法绕过它,谢谢!

以上是关于有没有办法让 XmlReader 将字符引用保留为文本而不是转换它?的主要内容,如果未能解决你的问题,请参考以下文章

XmlReader - 如何在没有 System.OutOfMemoryException 的情况下读取元素中很长的字符串

错误 CS0012 类型“XmlReader”在未引用的程序集中定义

将列表转换为字符串或单词[重复]

有没有办法让 PHP 将 sql 结果直接转换为 JSON?

excel vba 数组中第1位字符为0,赋给单元格时如何将0保留?

在 XmlReader .NET 4.0 中加载失败目录文件