至于list
,可以用enumerate()
包裹以提供索引和当前元素,我希望有{{1}的包装器}:
.iter()
for path,element in iter_wrapper(xmltree.iter()):
pass
是所有父元素的列表
举例说明,非常低效的方式是
path
在path = []
it = element.getparent()
while it is not None:
path += [it]
it.getparent()
的每次迭代中,但显然有一种动态的方式
如何访问.iter()
的当前路径,因为迭代器内部知道“当前它在树中的位置”?
答案 0 :(得分:0)
我找不到方法来访问迭代器的内部属性。因此,唯一的方法是实现一个新的迭代器:
def iterate_etree(elem, parents=set()):
yield (parents, elem)
parents |= set([elem])
for gen in elem:
for child in iterate_etree(gen, parents):
yield child
parents -= set([elem])
可以像这样调用:
from lxml import etree
xmltree = etree.parse(some_xml_file)
for parents, element in iterate_etree(xmltree):
pass