使用pugixml或实际的HTML解析器进行HTML解析

时间:2012-04-09 20:31:19

标签: c++ html html-parsing pugixml

我对使用pugixml解析HTML文档感兴趣,但HTML有一些optional closing tags。以下是一个示例:<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,也会很棒。

2 个答案:

答案 0 :(得分:3)

我最终使用pugixml,将其转换为HTML解析器,并为其创建了一个github项目:https://github.com/rofldev/pugihtml

目前它并不完全符合HTML规范,但它在解析HTML方面做得相当不错,我可以使用它。我正在努力使其符合HTML规范。

答案 1 :(得分:1)

解决此问题的一种方法是进行一些将HTML转换为XHTML的预处理,然后将其“正式”视为XML并与XML工具一起使用。如果您想要走这条路线,请参阅此问题:How to convert HTML to XHTML?