使用ElementTree在Python中处理XML

问题描述:

我有ElementTree.iter()的问题。使用ElementTree在Python中处理XML

所以,我想这个例子在这个环节: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的实例有“国际热核实验堆

没有属性

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

+0

可能重复[ElementTree中的国际热核实验堆()相当于python2.6的(http://*.com/questions/7616800/elementtrees-iter-equivalent-in-python2-6) – 2012-07-09 07:31:05

+0

任何特别的原因你必须使用Python 2.4?真的,真的很老。 – millimoose 2012-07-09 11:19:50

在你的情况,你应该更换.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()

+0

好的,谢谢你,我会在我回家的时候试试这个,我会尽快更新你的。再次感谢! – neo 2012-07-09 10:02:36

+0

我试过getiterator(),但调用了根文件夹的所有子项。我怎样称呼一个孩子的子元素? – neo 2012-07-10 07:02:35

+0

是的,'.iter()'和'.getiterator()'是这样定义的。 '.getchildren()'返回一个只有节点的孩子(没有孙子)的列表。您可能对也可用于Python 2.4的lxml(http://lxml.de/)感兴趣,它具有相同的API,但也实现了XPath 1.0表达式。 – pepr 2012-07-10 08:00:55

尝试使用findall而不是iter。 ElementTree's iter() equivalent in Python2.6

根据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