此代码成功检查xpath中是否存在单个元素:
x = root.xpath("boolean(//*[contains(local-name(), 'bar')])", namespaces=lnamespaces)
print("xx ", x)
但是我需要检查是否存在诸如foo/bar
之类的路径。我尝试过:
x = root.xpath("boolean(//*[contains(local-name(), 'foo/bar')])", namespaces=lnamespaces)
print("xx ", x)
但是,即使存在foo/bar
路径,上面的代码也会计算为false。
代码:
from lxml import etree
mystr = """
<some>
<foo>
<bar>
</bar>
</foo>
<baz>
</baz>
<some>
"""
etxml = etree.HTML(mystr)
result = etxml.xpath("boolean(//*[contains(local-name(), 'foo/bar')])")
print("result: ", result)
答案 0 :(得分:1)
我不确定这是否是您所需要的,但恐怕我唯一能到达那里的方法是这样的:
tree_struct = etree.ElementTree(etxml)
for e in etxml.iter('bar'):
print('/foo/bar' in tree_struct.getpath(e))
输出:
True