There’s one caveat for iterating over xml.etree elements in python. Although the following code works on iterators – just like in C++ – the code sliently fails in checking consecutive children of the element being iterated over
import xml.etree.ElementTree as ET
xml = ET.parse('filename.xml')
root = xml.getroot()
for elem in root:
if (elem.get('name') == 'deleteme'):
root.remove(elem)
The iterator is not invalidated in case an element has been removed. As shuffling the iterators is more the `C way’ of solving problems, the more `pythonic’ solution consists of traversing the list backwards – just like in C++, again.
import xml.etree.ElementTree as ET
xml = ET.parse('filename.xml')
root = xml.getroot()
for elem in reversed(list(root)):
if (elem.get('name') == 'deleteme'):
root.remove(elem)