我可以使用XML解析器解析HTML文件吗?
为什么我能做到这一点。我知道XML用于存储数据,HTML用于显示数据。但从语法上讲,它们几乎完全相同。
预期用途是制作HTML解析器,它是Web爬虫应用程序的一部分
答案 0 :(得分:12)
您可以尝试使用XML解析器解析HTML文件,但它可能会失败。原因是HTML文档可以具有XML解析器不理解的以下HTML功能。
<br>
, <meta>
, <link>
和 <img>
(也称为 void 元素)<p>
<dt>
<li>
(他们的结束标记可以暗示)<
&#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和值。
纠正这一点,然后你会被告知'&'
是一个非法的角色。
将其替换为相应的实体&
,然后您将了解'>'
也是非法字符。
您尝试用来将HTML解析为XML的工具肯定会发现这种错误。一旦找到第一个,他就会停止处理你格式不正确的XML文档。
如果您尝试解析的HTML页面格式正确,XHTML 1.0严格,或者XHTML 1.1 ......
,您仍然有机会