我有这样的字符串
"<root><text>My test is > & < </text></root>"
实际上这是正确的 xml,除了 &、<、> 符号。
<root><text>My test is > & < </text></root>
在使用 XElement.Parse(str); 转换之前,我需要将其转换为
如何进行这种转换?
我有这样的字符串
"<root><text>My test is > & < </text></root>"
实际上这是正确的 xml,除了 &、<、> 符号。
<root><text>My test is > & < </text></root>
在使用 XElement.Parse(str); 转换之前,我需要将其转换为
如何进行这种转换?
new XElement
如果您使用而不是,XElement 将自动转义文本XElement.Parse()
:
LINQPad 片段:
var str = "<root><text>My test is > & < </text></root>";
var element = new XElement("element", str);
element.Dump();
输出:
<element><root><text>My test is > & < </text></root></element>
编辑:我只是重新阅读了这个问题,并意识到这不会产生所需的输出。
您遇到的问题是您传入的 XML 字符串根本上是无效的。如果你可以控制源,那么你应该在那里修复它。如果没有,则没有简单的方法可以修复它。
这几乎不可能可靠地实现。您应该从源头纠正此问题。如果您控制插入“My test is > & <”字符串的系统,那么您应该在插入之前转义该字符串。HttpUtility.HtmlEncode
是这样做的合理方式。
不要用用户文本替换变量(这是 XML 注入 - 有问题,不安全)。用转义文本替换它们。这是一个 XML 转义函数:http: //msdn.microsoft.com/en-us/library/system.security.securityelement.escape%28VS.80%29.aspx
这就像您也可以使用 HTML 一样。
这是“除 xyz 之外的 XML”的想法可能需要更仔细地研究。为了正确解决这个问题,您需要为您称为“XML 除外 xyz”的语言定义一个语法,然后您需要编写一个解析器来分析符合该语法的文档;此解析器的输出可以是输入的 XML 表示。这一切都是可行的。不容易,但可行。当然,使用像 XML 这样的标准的好处是您可以获得现成的解析器,而如果您发明自己的语法,那么您必须编写自己的解析器。
为您的语言编写一个好的解析器非常耗时,尤其是因为需要进行大量测试。编写一个经过糟糕测试的糟糕解析器可能很容易,这也是许多糟糕的程序员会做的事情。在这种情况下,优秀的软件工程师会认识到符合标准的好处。