如何允许(或替换)使用.NET';s的XML库?

如何允许(或替换)使用.NET';s的XML库?,.net,xml,.net,Xml,假设我有以下XML: <someRootElement> <someTagWithUrl>http://www.google.com/s.php&test=testing</someTagWithUrl> </someRootElement> http://www.google.com/s.php&test=testing someTagWithUrl中的符号无效,需要转义(使用&;),但假设我有一个包含上述全部内容的字符串

假设我有以下XML:

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

http://www.google.com/s.php&test=testing
someTagWithUrl中的符号无效,需要转义(使用
&;
),但假设我有一个包含上述全部内容的字符串

如何安全地避开符号,使其成为有效的XML?NET的XML库可以忽略这一点吗?(当前XElement.Parse将引发异常)


我曾考虑过使用正则表达式来搜索标记之间的符号,但我不能完全获得正确的语法。(类似于>(\&)\<作为正则表达式替换使用&但我无法理解)。

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

这样的正则表达式将使您在标记之外匹配符号


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


>[^对正则表达式尝试以下操作:

&(?!quot;|apos;|amp;|lt;|gt;#x?.*?;)
这将只在文本中找到无效的独立字符(不属于实体的字符)。以下是在将源数据处理为XML之前如何进行文本替换的示例:

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

不幸的是,我正在解析已经编写好的XML,因此如果我想使用它,我需要解决这个问题。我知道它是无效的XML,但我仍然需要使用它…@如果是这样的话,那么您将处于一个非常艰难的境地。您可能需要用
&;amp;amp;amp;amp;amp;amp;
替换
字符,并尽最大努力避免CData部分。不幸的是,我看不到另一种解决方法,因为您正在尝试使用标准解析器解析非标准XML。幸运的是,我不必处理CData,所以我想它应该不会那么糟糕?这看起来会起作用。您能告诉我使用它时.NET函数调用会是什么样子吗?(例如RegEx.Replace(myString),>[^谢谢!!这只会在标签之间找到符号吗?(例如,相对安全的替代品?)这不要紧。当符号不描述实体时,它们总是无效的,并且它们也不允许在标记中,无论是作为元素名称、属性名称还是属性值。您可能遇到的唯一问题是
CDATA
节是否在XML中;如果是这样,解决方案将更加复杂。