【发布时间】:2017-07-11 14:48:41
【问题描述】:
问题背景:
我有一个来自 Web 服务(我无法控制其内容)的 XML 响应,我想验证它。例如,响应中通常会有一个 URL,其中包含使用“&”的查询字符串参数。
代码:
以下代码给出了使用非法字符转义 XML 字符串的示例。这确实会产生一个转义字符串:
string xml = "<node>it's my \"node\" & i like it<node>";
string encodedXml = System.Security.SecurityElement.Escape(xml);
// RESULT: <node>it's my "node" & i like it<node>
如果我知道尝试将此转义的 XML 加载到新的 Xml 文档中,我将收到一个错误,即 XML 的第一个字符无效:
var doc = new XmlDocument();
// Error will occur here.
doc.LoadXml(encodedXml);
错误输出:
Data at the root level is invalid. Line 1, position 1.
如何将此转义的 XML 加载到 XML 文档对象中?
【问题讨论】:
-
给它有效的 XML。不要逃避尖括号。它们很重要。您所做的就像将其提供给 C# 编译器:
var x = \"some text\";。仅在字符串内转义引号字符。不要转义分隔字符串的有意义的引号字符。 -
我不确定,但是用于转义的类不应该能够反转它吗?
-
您的输入 XML 无效,因为裸 & 和格式错误的结束标记。除非您知道要进行哪些具体的手动更正,否则您不太可能使其有效并因此将其视为 XML。
-
这里没有什么神奇的。输入不是格式良好的 XML。您只能通过对可能存在的问题的具体了解来“修复”它。
标签: c# .net xml xmldocument