XML片段:
<field>& is escaped</field>
<field>"also escaped"</field>
<field>is & "not" escaped</field>
<field>is " and is not & escaped</field>
我正在寻找关于如何预先解析任何XML以逃避在通过解析器运行XML之前未转义的所有内容的建议?
我无法控制传递给我的XML,他们可能很快就会修复它,我必须找到解析它的方法。
我遇到的主要问题是将XML原样运行到解析器中(例如(下面))会因为某些XML没有被正确转义而导致错误而引发异常
string xml = "<field>& is not escaped</field>";
XmlReader.Create(new StringReader(xml))
答案 0 :(得分:3)
我建议您使用正则表达式替换未转义的&符号与其实体等效。
This question很有帮助,因为它可以让你找到这些流氓&符号的正则表达式:
&(?!(?:apos|quot|[gl]t|amp);|#)
您可以看到它与this demo中的正确文字相符。您可以在简单的替换操作中使用它:
var escXml = Regex.Replace(xml, "&(?!(?:apos|quot|[gl]t|amp);|#)", "&");
然后您就可以解析XML了。
答案 1 :(得分:0)
使用HTML Tidy设置为true的quote-ampersand
预处理文本数据(不是真正的XML)。
答案 2 :(得分:0)
如果你想解析非XML的东西,首先需要确定这种语言到底是什么以及你打算用它做什么:当你为非XML语言编写一个你想要的语法时要处理,您可以决定是否可以通过预处理来处理它,或者是否需要一个完整的解析器。
例如,如果您只需要处理未转义的“&amp;”然后是一个空格,如果你不关心注释和CDATA部分内发生的事情,那么这是一个相当容易的问题。如果你不想破坏评论或CDATA的内容,或者当你没有
的定义时需要处理像&npsp;
这样的事情,那么生活开始变得更加困难。
当然,如果您编写符合标准的软件,您和您的供应商可以节省大量的时间和费用。这就是标准的用途。