使用XML解析器解析HTML文档

13

我能否使用XML解析器来解析HTML文件?

为什么不能这样做呢?我知道XML用于存储数据,而HTML用于显示数据。但从语法角度来看,它们几乎相同。

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


只要你的HTML严格遵循XML(例如XHTML 1.0),就可以这样做。否则,HTML不是严格的XML,因此解析器会引发错误。 - fpierrat
2个回答

16
您可以尝试使用XML解析器解析HTML文件,但很可能会失败。因为HTML文档具有以下HTML功能,而XML解析器无法理解。
  • 元素从不拥有结束标签,并且不使用XML所谓的“自关闭标记语法”,例如<br><meta><link><img>(也称为void元素)
  • 元素不需要结束标签,例如<p><dt><li>(它们的结束标签可以被implied
  • 可以包含未转义标记“<”字符的元素,例如style、textarea、title、script;<script> if (a < b) … </script><title>Using the "<" operator</title>
  • 带有未引用值的属性;例如:<meta charset=utf-8>
  • 属性为空,完全没有给出单独的值;例如:<input disabled>
XML解析器将无法解析使用任何这些功能的HTML文档。 另一方面,HTML解析器基本上不会因为文档包含什么而失败。所有这些说法都是有道理的,同时也有工作正在进行中,旨在开发一种新型的XML解析:所谓的XML5解析,能够处理像空属性/未引用属性等在XML文档中的事物。有一个XML5规范草案,以及一个XML5解析器xml5ever

预期目的是制作一个Web爬虫应用程序的HTML解析器。

如果您要创建Web爬虫应用程序,您应该绝对使用HTML解析器,最好是符合HTML标准中的解析要求的HTML解析器。(HTML标准)
现在,许多(甚至大多数)语言都有符合要求的HTML解析器,例如:

8

语法上它们几乎是完全相同的

计算机很挑剔。 "几乎相同"是不够的。HTML允许一些XML不允许的内容,因此XML解析器会拒绝(虽然不是全部)HTML文档。

此外,有一个不同的质量文化。对于HTML,解析器的文化是“如果可能的话,尽量去处理输入”。对于XML,文化是“如果有错误,退回修复或替换”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接