【问题标题】:Alternative to ElementTree.iter() in Python 2.6Python 2.6 中 ElementTree.iter() 的替代方案
【发布时间】:2018-05-05 20:00:46
【问题描述】:

我正在使用 ElementTree 来解析 XML 文件。

我使用的是 Python 3.6,但现在我必须将我的代码转移到一台只有 Python 2.6 的机器上。我对语法进行了一些必要的更改,但我被困在ET.iter(),它在 Python 2.6 中不存在,并且我使用它没有参数递归地解析 ElementTree 对象。

我尝试将iter() 更改为findall(),但这要求提供一个参数来指定过滤元素的匹配项。我也尝试过简单地做

for child in element:
    # ... etc.

……但这只会返回element 下第一级的孩子,而不是它的所有后代(这是我需要的)。

如何递归获取 Python 2.6 中的所有元素?

【问题讨论】:

    标签: python xml iteration elementtree python-2.6


    【解决方案1】:

    ET.iter() 是在 Python 2.7 中引入的,以取代 ET.getiterator() ……尽管从那时起已被弃用,但在当前 Python 3.x 版本之前并包括在内,available 仍然存在。

    在许多情况下,如果需要兼容 Python 2.6,ET.getiterator() 可用作ET.iter() 的直接替代品。

    但是:需要注意的是,尽管它们在实践中经常可以互换,但这些方法相同:@987654328 @ 返回一个迭代器,而ET.getiterator() 返回一个列表:

    >>> tree.getiterator()
    [<Element 'root' at 0x...>, <Element 'sub1' at 0x...>, <Element 'sub2' at 0x...>]
    >>> tree.iter()
    <_elementtree._element_iterator object at 0x...>
    

    ... 具有这种差异所暗示的对性能和功能的所有潜在影响。

    【讨论】:

      猜你喜欢
      • 2015-03-21
      • 2021-04-13
      • 2011-02-09
      • 2015-06-19
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多