嘿伙计们,XDocument非常挑剔我需要解析的一个xml提要,并一直给我错误
'='是一个意外的令牌。预期的标记是';'。第1行,第576位。
基本上XDocument在XML文档中对松散的“=”符号哭泣。
我对源XML文档没有任何控制权,因此我需要让XDocument忽略此错误,或者使用其他类。任何一个想法?
答案 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解析器。