【问题标题】:etree: Element.iter() wrapper that holds the current path and the current elementetree:Element.iter() 包装器,保存当前路径和当前元素
【发布时间】:2015-09-22 15:07:25
【问题描述】:

至于lists,可以用enumerate() 包装以提供索引当前元素,我很想有一个.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()的每次迭代中,但显然有一个动态的方式。
我如何访问.iter() 的当前路径,因为在内部迭代器知道“它当前在树中的位置”?

【问题讨论】:

  • 您的问题到底是什么?这不是代码编写服务。

标签: python iterator elementtree


【解决方案1】:

我找不到访问迭代器内部属性的方法。因此,剩下的唯一方法就是实现一个新的迭代器:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多