【发布时间】:2021-10-24 16:31:31
【问题描述】:
我在字符串变量中有一个这样的xml(从文件加载)
<Data>
<Name>Test & < test> </Name>
</Data>
当我尝试加载此 xml 时出现异常“解析节点时发生错误”。我认为这是由于 & 在名称标签中。我在互联网上进行了搜索,但所有解决方案(例如SecurityElement.Escape)都转义了主要的 xml 元素,例如大于 gt 小于 lt,我只想替换 & 在我的情况下。我可以遍历 xml 并只替换数据部分,但有什么最短的方法吗?
【问题讨论】:
-
那是无效的 XML。修复产生这个的代码。没有序列化程序会接受
&amp;。&amp;实际上是转义字符。所有语言的所有 XML 序列化程序都将正确转义&amp; -
是的,这不是真正的 xml,而不是真正的 xml,因此 XML 工具不喜欢使用它也就不足为奇了。像@PanagiotisKanavos 一样,我强烈建议你在上游修复这个问题,这样你得到的是实际的 XML。
-
你说得对,我希望我能做到,但我是从其他来源获得的,我无法控制它。
-
&amp;的转义序列是&amp;。 HTML 和 XML 中的转义序列以&amp;开头。您不能用&amp;替换字符串中的每个&amp;,因为这会破坏 valid 转义序列。你必须告诉制作这个的人来修复他们的错误。或者向他们收取处理费用。 -
一种可能的解决方法是替换被空格包围的 & 符号(例如
text.Replace(" & "," &amp; ")但显然这不会处理所有情况。您必须向您的经理或客户明确说明您重新处理其他人的 critical 错误(XML 并不是什么新鲜事),如果失败,您将不承担任何责任。毕竟,该 XML 的 none 用户将能看懂