【问题标题】:Parsing an html document using an XML-parser使用 XML 解析器解析 html 文档
【发布时间】:2015-12-10 22:25:41
【问题描述】:

我可以使用 XML 解析器解析 HTML 文件吗?

为什么我不能(不能)这样做。我知道 XML 用于存储数据,而 HTML 用于显示数据。但在语法上它们几乎相同。

预期用途是制作 HTML 解析器,它是网络爬虫应用程序的一部分

【问题讨论】:

  • 只要您的 html 是严格的 XML(例如 XHTML 1.0),您就可以这样做。否则,HTML 不是严格意义上的 XML,因此解析器会引发错误。

标签: html xml parsing html-parsing


【解决方案1】:

您可以尝试使用 XML 解析器解析 HTML 文件,但很可能会失败。原因是 HTML 文档可以具有以下 XML 解析器无法理解的 HTML 特性。

  • 从不具有结束标签并且不使用 XML 所谓的“自闭合标签语法”的元素;例如,<br><meta><link><img>(也称为void 元素)
  • 不需要结束标签的元素;例如,<p> <dt> <li>(它们的结束标签可以隐含
  • 元素可以包含非转义标记<”字符;例如,styletextareatitlescript<script> if (a < b) … </script>, <title>Using the "<" operator</title>
  • 具有未引用值的属性;例如,<meta charset=utf-8>
  • 的属性,根本没有单独的值;例如,<input disabled>

XML 解析器将无法解析任何使用这些功能的 HTML 文档。

另一方面,HTML 解析器基本上不会失败,无论文档包含什么内容。


尽管如此,在开发一种新的 XML 解析类型方面也做了一些工作:所谓的 XML5 解析,即使在 XML 文档中也能够处理空/不带引号的属性等内容。有draft XML5 specification,还有as an XML5 parser, xml5ever


预期用途是制作 HTML 解析器,它是 Web 的一部分 爬虫应用

如果您要创建一个网络爬虫应用程序,您绝对应该使用 HTML 解析器,最好是符合 parsing requirements in the HTML standard 的 HTML 解析器。

如今,许多(甚至大多数)语言都有这样的符合标准的 HTML 解析器;例如:


【讨论】:

    【解决方案2】:

    在语法上它们几乎相同

    计算机很挑剔。 “几乎相同”还不够好。 HTML 允许 XML 不允许的东西,因此 XML 解析器将拒绝(许多,但不是全部)HTML 文档。

    此外,还有不同的质量文化。对于 HTML,解析器的文化是“尽可能对输入做一些事情”。对于 XML,文化是“如果它有问题,请将其送回维修或更换”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-22
      • 2013-08-31
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 2012-11-02
      • 2012-01-08
      • 1970-01-01
      相关资源
      最近更新 更多