使用 XmlDocument 获取 InnerText 或 InnerXml 时保留 XML 实体引用

Posted

技术标签:

【中文标题】使用 XmlDocument 获取 InnerText 或 InnerXml 时保留 XML 实体引用【英文标题】:Preserve XML entity references while getting InnerText or InnerXml with XmlDocument 【发布时间】:2013-08-07 12:33:33 【问题描述】:

我正在尝试使用XmlDocument 获取Xml nodeInnerTextInnerXml,同时我想保留& ' "

但是,即使我尝试InnerXml,它也只会保留& 而不会保留'"

我想知道它发生的确切原因以及解决此问题的方法。

例如假设我有一个带有 "'Cancel' & 'Abort'" 内的文本的 Xml 节点,并且当我使用 InnerXml(或 InnerText)读取此节点时重新运行,它必须给我与字符串输出完全相同的内容。

但是当我尝试这样做时,它会返回,"'Cancel' & 'Abort'" 这意味着它只保留&

注意:

<source>&quot;&amp;Cancel&apos;&quot;</source>
<target>&quot;&amp;Cancel&apos;&quot;</target>

这是我的 XLIFF(XML) 文件中的内容,因此在读取此 XLIFF(XML) 文件时,我想检索两个节点内的文本,因为它们现在可见,无需任何排他转换或任何处理。

问题是我拥有的 XLIFf(XML) 数据,包含 '" 以及 &amp;apos;&amp;quot;,我的目标是将这些实体引用检测为错误,因为我们是我们的数据中不应该有这个。 换言之,我们的数据中只允许出现'"

【问题讨论】:

我不知道我错过了什么,但仍然无法弄清楚问题 【参考方案1】:

尝试在您的InnerXMLInnerText 上使用WebUtility.htmlEncode() 方法

【讨论】:

我想,我的问题不是很清楚。我想完全按照原样获取 Xml 节点内部的内容,而不是更改它。如果有 XML 实体引用,那么它应该显示或返回它,否则我不想明确地将其更改为一个。 根据文档,为了允许属性值同时包含单引号和双引号,撇号或单引号字符 (') 可以表示为“&’”,而双引号字符(") as """。所以当你把它放在 xml 中时,它会被转换。所以你必须在提取文本后再次手动转换它。尝试在浏览器上打开你的 xml 文件,你会观察到什么我的意思是 我明白你在说什么。我必须为造成的混乱和没有清楚地解释我的 XLIFF 数据文件中的内容而道歉。请检查我更新的问题。谢谢。问题是我拥有的 XLIFf(XML) 数据同时包含 ' 或 " 和 " 和 " ,我的目标是将这些实体引用检测为错误,因为我们的数据中不应该有它。所以这是为什么我一直在寻求一种复杂的方法,而不是自己专门检查和转换它们。

以上是关于使用 XmlDocument 获取 InnerText 或 InnerXml 时保留 XML 实体引用的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用 XmlReader 但不使用 XmlDocument 获取额外的空白值

从 XmlDocument 中获取带有换行符的缩进 XML 的最简单方法是啥?

获取对象 XmlDocument 值

将 XML 文件读入 XmlDocument

c# xmldocument 获取特定节点之后的所有兄弟节点

.NET XmlDocument 保留空格