在Python ElementTree中,如何获得树中元素的所有祖先的列表?

2024-10-01 00:18:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要“递归获取祖先”函数。
示例运行可以是

>>> dump(tr)
<anc1>
  <anc2>
    <element> </element>
  </anc2>
</anc1>
>>> input_element = tr.getiterator("element")[0]
>>> get_ancestors_recursively(input_element)
['anc1', 'anc2']

有人能帮我吗?在


Tags: 函数示例inputgetelementdumptrrecursively
3条回答

在最新版本的ElementTree(v1.3或更高版本)中,您只需

input_element.find('..')

递归地。但是,Python附带的ElementTree没有这个功能,而且我在Element类中没有看到任何向上的内容。在

我相信这意味着您必须用一种艰难的方式来完成:通过对元素树的彻底搜索。在

^{2}$

由于DFS的存在,这是很慢的,并且产生了大量的垃圾收集列表,但是如果你能处理好的话,应该没问题。在

从很多谷歌搜索中找到了这个小宝石(http://elmpowered.skawaii.net/?p=74

父项=根.findall(“//{0}/..”格式(元素标签))在

这里的根是树的根节点。elem是从迭代中获得的实际元素对象。在

这确实要求您知道根目录,这可能意味着更改XML解析的设置方式,但这最多是次要的。在

另一个选项是LXML,它为内置的elementtreeapi提供了有用的扩展。如果您愿意安装一个外部模块,它有一个很好的Element.getparent()函数,您可以简单地递归调用该函数,直到到达ElementTree.getroot()。这可能是最快、最优雅的解决方案(因为lxml.etree module为指向其父元素的元素引入了指针属性,因此不必在整个树中搜索合适的parent/child对)。在

相关问题 更多 >