XDocument的替代品

本文关键字:替代品 XDocument | 更新日期: 2023-09-27 17:53:44

嘿,伙计们,XDocument对我必须解析的xml提要之一非常挑剔,并且一直给我错误

'='是一个意外的标记。期望的标记是';'。第一行,位置576

这基本上是XDocument在抱怨XML文档中缺少"="符号。

我无法控制源XML文档,因此我需要让XDocument忽略此错误,或者使用其他类。有什么想法吗?

XDocument的替代品

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

它不会生成好的XML,但是如果你需要加载一个糟糕的文档,那么HTML敏捷包是一个很好的工具。它可以忽略使HTML不像XHTML或不像XML的许多因素,因此错误的XML输入也可能被解析。它表达的对象模型类似于XmlDocument。例如

 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解析器之前,以某种方式格式化/修复错误的XML内容(例如,可能以其字符串形式,或使用其他工具)。

看一下这个问题的答案:解析XML/XHTML文档但忽略c#中的错误

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