4

我对使用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 文档都会失败。有没有办法避免这种情况?如果没有办法“修复”它,那么是否还有另一个与 pugixml 一样快的 HTML 解析工具?

更新

如果 HTML 解析器也支持 XPATH,那就太好了。

4

2 回答 2

4

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

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

于 2012-04-14T22:23:59.137 回答
1

解决此问题的一种方法是进行一些将 HTML 转换为 XHTML 的预处理,然后它会“正式”被视为 XML 并且可用于 XML 工具。如果您想走这条路,请参阅以下问题: 如何将 HTML 转换为 XHTML?

于 2012-04-09T22:48:44.807 回答