使用XML解析器解析html文档

时间:2015-09-14 20:00:03

标签: html xml parsing html-parsing

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

为什么我能做到这一点。我知道XML用于存储数据,HTML用于显示数据。但从语法上讲,它们几乎完全相同。

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

3 个答案:

答案 0 :(得分:12)

您可以尝试使用XML解析器解析HTML文件,但它可能会失败。原因是HTML文档可以具有XML解析器不理解的以下HTML功能。

  • 永远不会有结束标记且不使用XML所谓的“自闭标记语法”的元素;例如, <br> <meta> <link> <img> (也称为 void 元素)
  • 不需要结束标记的元素;例如, <p> <dt> <li> (他们的结束标记可以暗示
  • 可以包含未转义标记&#34; <&#34;字符;例如,样式 textarea 标题脚本; <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的一部分   爬虫应用程序

如果您要创建一个Web爬虫应用程序,您绝对应该使用HTML解析器 - 理想情况下,是一个符合parsing requirements in the HTML standard的HTML解析器。

现在,许多(甚至大多数)语言都有这样一致的HTML解析器; e.g:

答案 1 :(得分:7)

  语法上它们几乎相同

电脑很挑剔。 “几乎相同”还不够好。 HTML允许XML不支持的内容,因此XML解析器将拒绝(许多但不是全部)HTML文档。

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

答案 2 :(得分:3)

只要XML内容没有很好地形成,XML解析器就会停止 某些XML规则不适用于HTML(例如非法字符),因此任何XML解析器都会认为您的HTML格式不正确,并且不会继续进行。

请考虑关注HTML&#34; page&#34;:

<!doctype html>
<html>
  <head><title>Test</title></head>
  <body>
    <input type="checkbox" name="azerty" checked />
    <p>if A=B & B>D, then A>D</p>
  </body>
</html>

这是完美的形式和有效的HTML,因为您可以检查W3C验证器(validator.w3.org)。

现在只需尝试验证以下XML(例如,在http://www.xmlvalidation.com上):

<?xml version="1.0"?>
<html>
  <head><title>Test</title></head>
  <body>
    <input type="checkbox" name="azerty" checked />
    <p>if A=B & B>D, then A>D</p>
  </body>
</html>

您将收到通知,表示XML格式不正确,因为属性checked后面没有相同的signe和值。
纠正这一点,然后你会被告知'&'是一个非法的角色。 将其替换为相应的实体&amp;,然后您将了解'>'也是非法字符。

您尝试用来将HTML解析为XML的工具肯定会发现这种错误。一旦找到第一个,他就会停止处理你格式不正确的XML文档。

如果您尝试解析的HTML页面格式正确,XHTML 1.0严格,或者XHTML 1.1 ......

,您仍然有机会