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

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

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

【问题讨论】:

标签: c# xml parsing xmldocument xml-parsing


【解决方案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 对象将其导入。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-05-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多