如何使用.NET的XML库允许(或替换)&符号?

时间:2010-08-23 23:58:48

标签: .net xml

假设我有以下XML:

<someRootElement>
  <someTagWithUrl>http://www.google.com/s.php&test=testing</someTagWithUrl>
</someRootElement>

someTagWithUrl中的&符号无效,需要进行转义(使用&amp;),但假设我有一个包含上述全部内容的字符串。

如何安全地逃离&符号以使其成为有效的XML? .NET的XML库可以忽略它吗? (目前XElement.Parse会抛出异常)

我已经考虑过使用正则表达式来搜索标签之间的&符号,但我不能完全理解语法。 (类似于&gt;(\&amp;)\&lt;作为正则表达式替换使用&amp;但我无法弄清楚。)

3 个答案:

答案 0 :(得分:3)

试试这个正则表达式:

&(?!quot;|apos;|amp;|lt;|gt;#x?.*?;)

这将只找到文本中无效的独立&字符(不属于实体的字符)。以下是在将源数据作为XML处理之前如何进行文本替换的示例:

var regex = new Regex("&(?!quot;|apos;|amp;|lt;|gt;#x?.*?;)");
string fixedXml = regex.Replace(input, "&amp;");

答案 1 :(得分:2)

您粘贴的内容是无效的XML,任何使用XML库解析它的尝试都将失败。确保正确转义的最佳方法是使用XML / HTML编写器来创建数据。例如XmlWriter。他们将确保所有字符串都被正确转义。

答案 2 :(得分:1)

像这样的正则表达式可以让你匹配标签之外的&符号


>[^<]*(&)[^<]*<