Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Processing XML in Python with ElementTree

I have a problem with ElementTree.iter().

So I tried this example in this link : http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree/

So here's what I've tried:

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

And I get this error AttributeError: ElementTree instance has no attribute 'iter'

Additional info: The version of my Python is 2.4 I separately installed elementtree. Other examples in the link that I provide is working in my Python installed. Only the ElementTree.iter() is not working. Thanks in advance for all of your help. Cheers!

like image 704
neo Avatar asked Nov 29 '22 14:11

neo


1 Answers

In your case, you should replace the .iter() by .getiterator(), and you possibly should call it for the root element, not for the tree (but I am not sure because I do not have the Python 2.4 and the module at my hands).

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

This is the older functionality that was deprecated in Python 2.7. For Python 2.7, the .iter() should work with the built-in module:

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

A side note: the standard module supports also direct iteration through the element node (i.e. no .iter() or whatever method called, just the for elem in root:). It differs from .iter() -- it goes only through the immediate descendant nodes. Similar functionality is implemented in the older versions as .getchildren().

like image 165
pepr Avatar answered Dec 05 '22 05:12

pepr