我需要的是一种使用 html5lib 解析器生成真正的 xml.etree.ElementTree 的方法。(出于可移植性的原因,lxml 不是一个选项。)
ELementTree.parse
可以将解析器作为可选参数
xml.etree.ElementTree.parse(source, parser=None)
但尚不清楚这样的解析器会是什么样子。HTML5 中是否有可以用于parser
参数的类或对象?关于这个问题的两个库的文档都很薄。
上下文:
我有一个无法解析的格式错误的 XHTML 文件ElementTree.parse
:
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Title</title></head>
<body><div class="cls">Note that this br<br>is missing a closing slash</div></body>
</html>
所以我html5lib.parse
改用默认treebuilder="etree"
参数,效果很好。
但是 html5lib 显然不输出一个xml.etree.ElementTree
对象,只是一个具有几乎相同的 API 的对象。这有两个问题:
- html5lib
find
不支持该namespaces
参数,使得 XPath 过于冗长而没有笨拙的包装函数。 - Eclipse 调试器不支持对 html5lib etree 进行钻取。
所以我不能单独使用 ElementTree 或 html5lib。