etree:Element.iter()包装器,用于保存当前路径和当前元素

时间:2015-07-05 10:30:43

标签: python iterator elementtree

至于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()的当前路径,因为迭代器内部知道“当前它在树中的位置”?

1 个答案:

答案 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