我需要的是一种使用html5lib解析器生成一个xml.etree.ElementTree. (出于可移植性的考虑,lxml不是一个选项。)
ELementTree.parse
can take a parser作为可选参数
xml.etree.ElementTree.parse(source, parser=None)
但还不清楚这样的解析器是什么样子。HTML5中有没有可以用于parser
参数的类或对象?关于这个问题的两个库的文档都很薄。在
上下文:
我有一个格式错误的XHTML文件,无法用ElementTree.parse
进行解析:
所以我使用了html5lib.parse
,而使用了默认的treebuilder="etree"
参数,效果很好。在
但是html5lib显然不输出xml.etree.ElementTree
对象,只输出一个具有几乎相同API的对象。这有两个问题:
find
不支持^{所以我不能单独使用ElementTree或html5lib。在
您必须用
ElementTree
包装响应给定
xml.etree.ElementTree
为etree
(通常导入为):返回的不是
etree.ElementTree
,而是etree.Element
(这与etree.fromstring
返回的内容相同;只有etree.parse
返回etree.ElementTree
)。它确实是etree模块的一部分-它不是具有类似API的东西。您遇到的问题对etree.fromstring
的影响与html5lib相同。在Python documentation for ^{} 没有提到
namespaces
参数-它似乎是ElementTree
对象(但不是Element
对象)的一个未记录的特性。因此,它可能不是真正应该依赖的东西!最好的办法是使用包装器函数。在Eclipse不能遍历树的事实归结为html5lib在存在时默认为
xml.etree.cElementTree
,根据模块的文档,这是相同的,但是使用CPython的API在C中实现,从而阻止Eclipse的调试器工作。您可以使用非加速版本获得一个treebuilder(请注意,Python 3.3中的两个都是C实现-cElementTree
只是作为一个不推荐使用的别名存在):相关问题 更多 >
编程相关推荐