我已经使用了Element Tree一段时间了,因为它简单而我喜欢它
但我怀疑它的x路径实现
这是XML文件
<a>
<b name="b1"></b>
<b name="b2"><c/></b>
<b name="b2"></b>
<b name="b3"></b>
</a>
python代码
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
root.findall("b[@name='b2' and c]")
程序显示错误:
invalid predicate
但如果我使用
root.findall("b[@name='b2']") or
root.findall("b[c]")
有效,
答案 0 :(得分:5)
ElementTree为XPath表达式提供有限的支持。目标是支持缩写语法的一小部分;完整的XPath引擎不在核心库的范围内。
(F.Lundh,XPath Support in ElementTree。)
对于支持XPath(1.0)的ElementTree实现,请查看LXML:
>>> s = """<a>
<b name="b1"></b>
<b name="b2"><c /></b>
<b name="b2"></b>
<b name="b3"></b>
</a>"""
>>> from lxml import etree
>>> t = etree.fromstring(s)
>>> t.xpath("b[@name='b2' and c]")
[<Element b at 1340788>]
答案 1 :(得分:3)
来自ElementTree documentation on XPath support.:
ElementTree为XPath表达式提供有限的支持。目标是支持缩写语法的一小部分;完整的XPath引擎不在核心库的范围内。
您刚刚发现了实施方面的限制。您可以使用lxml代替;它提供了一个ElementTree兼容的接口,其中包含完整的XPath 1.0 support。