我试图使用e.find('..)'
访问树中元素的父节点,但它不起作用。对于下面的代码:
import xml.etree.ElementTree as etree
xml = "<a> <b> </b> </a>"
root = etree.fromstring(xml)
child = root.find('*')
print(child.find('..'))
输出为:None
,为什么?以及,我如何获得父元素(在本例中为node〈\a〉)?
我已经尝试了不同的路径组合,并在互联网上搜索,有些解决方案不起作用,有些是特定的问题。
3条答案
按热度按时间de90aj5v1#
您的代码段返回
None
,因为根的父级是根本身。尝试lxml包,
lxml
是C库libxml2
和libxslt
的Python绑定。它的独特之处在于它将这些库的速度和XML功能完整性与原生Python API的简单性相结合,大多数情况下兼容但上级着名的ElementTree API。在你的情况下,我们可以这样做;
cetgtptt2#
使用包含XPath 1.0实现的lxml库:
nkkqxpd93#
可以使用ElementTree获取父对象,但不能直接在子对象上使用
find()
。该文件规定:
..
选择父元素。如果路径试图到达起始元素的祖先(元素find
被调用),则返回None
。演示: