使用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()不起作用。在此先感谢您的帮助。干杯!
在你的情况,你应该更换.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()
。
好的,谢谢你,我会在我回家的时候试试这个,我会尽快更新你的。再次感谢! – neo 2012-07-09 10:02:36
我试过getiterator(),但调用了根文件夹的所有子项。我怎样称呼一个孩子的子元素? – neo 2012-07-10 07:02:35
是的,'.iter()'和'.getiterator()'是这样定义的。 '.getchildren()'返回一个只有节点的孩子(没有孙子)的列表。您可能对也可用于Python 2.4的lxml(http://lxml.de/)感兴趣,它具有相同的API,但也实现了XPath 1.0表达式。 – pepr 2012-07-10 08:00:55
根据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
的
可能重复[ElementTree中的国际热核实验堆()相当于python2.6的(http://stackoverflow.com/questions/7616800/elementtrees-iter-equivalent-in-python2-6) – 2012-07-09 07:31:05
任何特别的原因你必须使用Python 2.4?真的,真的很老。 – millimoose 2012-07-09 11:19:50