使用 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 node
的InnerText
或InnerXml
,同时我想保留& ' "
。
但是,即使我尝试InnerXml
,它也只会保留&
而不会保留'
和"
我想知道它发生的确切原因以及解决此问题的方法。
例如假设我有一个带有 "'Cancel' & 'Abort'"
内的文本的 Xml 节点,并且当我使用 InnerXml
(或 InnerText
)读取此节点时重新运行,它必须给我与字符串输出完全相同的内容。
但是当我尝试这样做时,它会返回,"'Cancel' & 'Abort'"
这意味着它只保留&
注意:
<source>"&Cancel'"</source>
<target>"&Cancel'"</target>
这是我的 XLIFF(XML) 文件中的内容,因此在读取此 XLIFF(XML) 文件时,我想检索两个节点内的文本,因为它们现在可见,无需任何排他转换或任何处理。
问题是我拥有的 XLIFf(XML) 数据,包含 '
或 "
以及 &apos;
和 &quot;
,我的目标是将这些实体引用检测为错误,因为我们是我们的数据中不应该有这个。
换言之,我们的数据中只允许出现'
或"
。
【问题讨论】:
我不知道我错过了什么,但仍然无法弄清楚问题 【参考方案1】:尝试在您的InnerXML
或InnerText
上使用WebUtility.htmlEncode()
方法
【讨论】:
我想,我的问题不是很清楚。我想完全按照原样获取 Xml 节点内部的内容,而不是更改它。如果有 XML 实体引用,那么它应该显示或返回它,否则我不想明确地将其更改为一个。 根据文档,为了允许属性值同时包含单引号和双引号,撇号或单引号字符 (') 可以表示为“&’”,而双引号字符(") as """。所以当你把它放在 xml 中时,它会被转换。所以你必须在提取文本后再次手动转换它。尝试在浏览器上打开你的 xml 文件,你会观察到什么我的意思是 我明白你在说什么。我必须为造成的混乱和没有清楚地解释我的 XLIFF 数据文件中的内容而道歉。请检查我更新的问题。谢谢。问题是我拥有的 XLIFf(XML) 数据同时包含 ' 或 " 和 " 和 " ,我的目标是将这些实体引用检测为错误,因为我们的数据中不应该有它。所以这是为什么我一直在寻求一种复杂的方法,而不是自己专门检查和转换它们。以上是关于使用 XmlDocument 获取 InnerText 或 InnerXml 时保留 XML 实体引用的主要内容,如果未能解决你的问题,请参考以下文章
C# 使用 XmlReader 但不使用 XmlDocument 获取额外的空白值
从 XmlDocument 中获取带有换行符的缩进 XML 的最简单方法是啥?