我对使用pugixml解析HTML文档感兴趣,但HTML有一些可选的结束标签。下面是一个示例:<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
Pugixml 一旦遇到未关闭的标记就会停止读取 HTML,但在 HTML 中缺少结束标记并不一定意味着存在开始-结束标记不匹配。
解析 pugixml 的 HTML 文档的简单测试失败,因为元标记是 HTML 文档的第二行:http://pugixml.googlecode.com/svn/tags/latest/docs/quickstart.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>pugixml 1.0</title>
<link rel="stylesheet" href="pugixml.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="quickstart.html" title="pugixml 1.0">
</head>
<!--- etc... -->
如果我尝试使用 pugixml 解析它们,野外的许多 HTML 文档都会失败。有没有办法避免这种情况?如果没有办法"修复"这个问题,那么是否有另一个HTML解析工具与pugixml一样快?
更新
如果HTML解析器也支持XPATH,那也很棒。
我最终采用了pugixml,将其转换为HTML解析器,并为它创建了一个github项目:https://github.com/rofldev/pugihtml
目前,它并不完全符合HTML规范,但它在解析HTML方面做得足够不错,我可以使用它。我正在努力使其符合HTML规范。
解决这个问题的一种方法是做一些将HTML转换为XHTML的预处理,然后它"正式"被认为是XML并且可以与XML工具一起使用。 如果你想走这条路,请参阅这个问题:如何将HTML转换为XHTML?