我有串这样的
"<root><text>My test is > & < </text></root>"
实际上,这是正确的XML,除了&,<,>符号。
我需要将其转换到<root><text>My test is > & < </text></root>
<root><text>My test is > & < </text></root>
<root><text>My test is > & < </text></root>
之前,我将其转换与XElement.Parse(STR);
如何使这种转换?
这是近了,就不可能实现可靠。 你应该从源头上解决这个问题。 如果控制被插入系统的“我的测试是>&<”的字符串,那么你应该在插入之前逃离这个字符串。 HttpUtility.HtmlEncode
是这样做的合理的方式。
如果你使用的XElement会自动躲避文本new 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字符串是根本无效的。 如果你能控制源,那么你应该有解决它。 如果不是,有固定它没有简单的方法。
不要更换与用户文本变量(这是XML注入 - 越野车,不安全)。 与逃脱的文本替换它们。 下面是一个XML逃生功能: http://msdn.microsoft.com/en-us/library/system.security.securityelement.escape%28VS.80%29.aspx
这就像你将与HTML做到这一点。
这是也许需要更多的仔细检查“除了XYZ XML”的想法。 要正确地解决这个问题,你需要定义你所说的“XML除了XYZ”的语言语法,然后你需要写一个分析器,用于分析符合该语法文件; 这种分析器的输出可以是输入的XML表示。 这是所有相当可行的。 不容易,但可行的。 当然,使用像XML标准的好处是,你可以得到一个解析器关闭的,现成的,而如果你创造你自己的语法,那么你必须写自己的解析器。
写作语言的好分析器是耗时所需的大量测试的不只是因为。 写一个糟糕的解析器,非常真实测试可能是很容易的,而这也正是很多不好的程序员会做。 在这种情况下,一个优秀的软件工程师将承认符合标准的好处。