【问题标题】:Algorithms to fix a broken HTML修复损坏的 HTML 的算法
【发布时间】:2011-06-08 23:49:11
【问题描述】:

我正在寻找可以用来修复损坏的 HTML 的算法和数据结构。我知道每种语言都有很多内置工具可以做到这一点。但是我想学这个。我能想到的一些方法是 -

  1. 使用正则表达式 - 似乎是一种幼稚的方法
  2. 创建 DOM - 但是如何使用损坏的 html 创建 DOM 树?

更新:这更像是我期待的一般性讨论。但是,如果您引用 C、C++、Python 或 Java 中的任何工具,我都可以。

谢谢

【问题讨论】:

    标签: algorithm language-agnostic dom data-structures html-parsing


    【解决方案1】:

    使用the HTML 5 parsing algorithm(旨在处理损坏)解析标记,并从中构建一个DOM。然后您可以序列化回 HTML。

    【讨论】:

    • 不错的链接,虽然它说“由此产生的混乱——验证器声称文档具有一种表示,而广泛部署的 Web 浏览器可互操作地实现不同的表示——已经浪费了数十年的生产力。”甚至“几十年”以来都没有“广泛部署”的网络浏览器,除非它们的意思是“1.5 年”。
    【解决方案2】:

    RegEx + HTML = 灾难。

    HTML 成为有效的 SGML 却违反 RegEx 规则的方式太多了。

    您确实需要有状态的 SGML 解析器。你没有提到你愿意使用什么语言,但是那里有很多有状态的 SGML 解析器。

    在 .NET 中,我们经常使用 SGMLReader - 一种返回格式良好的 DOM 和/或 XML DOM 的有状态解析器。

    在 C 中,W3C 有一个合理的C SGML Parser

    在 Java 中有一个 SAX-style SGML parser

    【讨论】:

      【解决方案3】:

      我同意正则表达式的道路漫长而曲折的想法:使用专为读取损坏的 HTLM 而设计的现有代码更加健壮和容易。

      既然你提到了 Python,Beautiful Soup 解析器据说可以很好地处理损坏的 HTML。

      【讨论】:

        猜你喜欢
        • 2013-09-10
        • 2010-09-25
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 2018-12-20
        • 2010-11-29
        • 2011-09-04
        • 1970-01-01
        相关资源
        最近更新 更多