解析格式错误的 XML

Posted

技术标签:

【中文标题】解析格式错误的 XML【英文标题】:Parse malformed XML 【发布时间】:2010-11-03 01:13:43 【问题描述】:

我正在尝试将一段(可能)格式错误的 html 加载到 XMLDocument 对象中,但它因 XMLExceptions 而失败...因为有额外的打开/关闭标记,以及格式错误的 XML 标记,例如 <img > 而不是<img />

如何让 XML 解析数据中的所有错误?是否有任何我可以在解析之前应用的 XML 验证器来纠正这些错误?还是会处理异常解析任何可以解析的内容?

【问题讨论】:

我会去处理异常并尝试如果你知道畸形...... 如果它的格式错误,它会发脾气(XMLException)并且根本不解析它!不存在子节点。 ***.com/questions/28909882/dealing-with-malformed-xml 【参考方案1】:

你想做的事情非常困难。无法使用 XML 解析器解析 HTML,因为 XML 是严格的,而 HTML 不是。如果该 HTML 符合 XHTML(HTML 作为 XML),那么 XML 解析器将毫无问题地解析 HTML。

如果您真的想为 HTML 使用 XML 解析器,您可能想看看是否有任何 HTML 到 XHTML 转换器。

换句话说,我还没有遇到一个可以处理格式错误的 XML 的 XML 解析器......它们的设计目的不是接受像 HTML 这样的松散标记(也有充分的理由:))

【讨论】:

【参考方案2】:

HTML Agility Pack 将解析 html,而不是 xhtml,并且非常宽容。如果你用过XmlDocument,对象模型会很熟悉。

【讨论】:

这在包含缺少结束标记的节点树的 XML 上非常有效。感谢您的建议!【参考方案3】:

您可能想查看this question 的答案。

基本上介于 .NET 端口的 beautifulsoup 和 HTML 敏捷包之间,有一种方法。

【讨论】:

【参考方案4】:

您不太可能构建具有这种格式错误结构的 XmlDocument。 XmlDocument(据我所知)要求 xml 内容遵守正确的嵌套和闭包语法。

但是,您怀疑您可以使用 XmlReader 来解析它。如果遇到某些严重错误,它仍然可能抛出异常,但根据 MSDN 文档,它至少可以披露错误的位置。

如果您只是处理 HTML,则有 HTML Agility Pack,它可能会满足您的目的。

【讨论】:

【参考方案5】:

您不能将格式错误的 XML 加载到 XmlDocument

查看 CodePlex 上的 Html Agility Pack

【讨论】:

【参考方案6】:

根据具体需要,您可以使用HTML Tidy 清理文档,然后使用 XMLDocument 对象将其导入。

【讨论】:

以上是关于解析格式错误的 XML的主要内容,如果未能解决你的问题,请参考以下文章

XML解析失败:格式不符

XML 解析错误:在 FireFox 中格式不正确,但在 Chrome 中格式良好

xml 解析错误:python 中格式不正确<invalid token>

如何使用 ofx4j 解析格式错误的 xml (ofx)?

无效格式xml的最佳PHP解析器[重复]

pom.xml错误怎么解决