我遇到了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()不起作用。在此先感谢您的所有帮助。干杯!
答案 0 :(得分:20)
在您的情况下,您应该将.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()
。
答案 1 :(得分:1)
尝试使用findall而不是iter。 ElementTree's iter() equivalent in Python2.6
答案 2 :(得分:0)
根据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