XDocument的替代品

时间:2011-04-29 23:19:31

标签: c# xml-parsing

嘿伙计们,XDocument非常挑剔我需要解析的一个xml提要,并一直给我错误

  

'='是一个意外的令牌。预期的标记是';'。第1行,第576位。

基本上XDocument在XML文档中对松散的“=”符号哭泣。

我对源XML文档没有任何控制权,因此我需要让XDocument忽略此错误,或者使用其他类。任何一个想法?

3 个答案:

答案 0 :(得分:3)

如果文档格式不是格式良好的XML(我的猜测是文档中有'& ='或其他看起来像实体的字符串)那么任何其他XML解析器都不可能是更快乐。您是否尝试在IE中加载文档以查看它是在那里解析还是粘贴到XML验证器?您也可以尝试XmlDocument.Load()并查看它是否在那里解析,这是下一个最接近的XML解析器(除了XmlReader,它需要一些设置)。

答案 1 :(得分:1)

看看这个问题的答案:Parsing an XML/XHTML document but ignoring errors in C#

我认为最好的选择是在try / catch块中解析它,删除catch块中的违规块,然后重新解析。

答案 2 :(得分:1)

它不会产生好的XML,但是如果你只需要加载一个糟糕的文档,那么HTML Agility Pack就是一个很好的工具。它可以忽略许多使HTML不是XHTML而不是类似XML的东西,因此您的错误XML输入也可能被解析。它表达的对象模型类似于XmlDocument。 e.g。

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.xml");

 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
 }
 doc.Save("file.htm");

或者您可以使用Agility Pack清理XML,然后将其干净的输出提供给真正的XML解析器以进行进一步处理。

这是一个快速而肮脏的技巧,我曾用于一次性任务。不一定建议采用适当的解决方案。

如果时间允许,我建议以某种方式格式化/修复错误的XML内容(例如,可能以其字符串形式,或使用其他工具),然后再将其提供给XML解析器。