繁体   English   中英

使用ElementTree在Python中处理XML

[英]Processing XML in Python with ElementTree

我有一个ElementTree.iter()的问题。

所以我在这个链接中尝试了这个例子: http//eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree/

所以这就是我尝试过的:

import elementtree.ElementTree as ET
tree = ET.parse('XML_file.xml')
root = tree.getroot()
for elem in tree.iter():
    print elem.tag, elem.attrib

我得到这个错误AttributeError:ElementTree实例没有属性'iter'

附加信息:我的Python版本是2.4我单独安装了elementtree。 我提供的链接中的其他示例是在我的Python中安装。 只有ElementTree.iter()不起作用。 在此先感谢您的所有帮助。 干杯!

在你的情况下,你应该用.iter()替换.getiterator() ,你可能应该为root元素而不是树调用它(但我不确定因为我没有Python 2.4和模块在我手中)。

import elementtree.ElementTree as ET
tree = ET.parse('XML_file.xml')
root = tree.getroot()
for elem in root.getiterator():
    print elem.tag, elem.attrib

这是Python 2.7中不推荐使用的旧功能。 对于Python 2.7, .iter()应该与内置模块一起使用:

import xml.etree.ElementTree as ET
tree = ET.parse('XML_file.xml')
root = tree.getroot()
for elem in root.iter():
    print elem.tag, elem.attrib

旁注:标准模块也支持通过元素节点直接迭代(即没有.iter()或任何调用的方法,只是for elem in root: )。 它与.iter()不同 - 它只通过直接后代节点。 类似的功能在旧版本中实现为.getchildren()

尝试使用findall而不是iter。 ElementTree在Python2.6中的iter()等价物

根据python文档,这个API应该在2.5中,但它不存在。 您可以使用下面提到的代码进行迭代。 这样你也可以传递标签。

def iter(element, tag=None):
    if tag == "*":
        tag = None
    if tag is None or element.tag == tag:
        yield element
    for e in element._children:
        for e in e.iter(tag):
            yield e

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM