ElementTree: Springende Iteration von Element.remove ()

Ich habe diese XML-Eingabedatei:

<?xml version="1.0"?>
<zero>
  <First>
    <second>
      <third-num>1</third-num>
      <third-def>object001</third-def>
      <third-len>458</third-len>
    </second>
    <second>
      <third-num>2</third-num>
      <third-def>object002</third-def>
      <third-len>426</third-len>
    </second>
    <second>
      <third-num>3</third-num>
      <third-def>object003</third-def>
      <third-len>998</third-len>
    </second>
  </First>
</zero>

Mein Ziel ist es, jede zweite Ebene zu entfernen, für die<third-def> das ist kein wert. Dazu habe ich diesen Code geschrieben:

try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET
inputfile='inputfile.xml'
tree = ET.parse(inputfile)
root = tree.getroot()

elem = tree.find('First')
for elem2 in tree.iter(tag='second'):
    if elem2.find('third-def').text == 'object001':
        pass
    else:
        elem.remove(elem2)
        #elem2.clear()

Mein Problem istelem.remove(elem2). Es wird jede zweite Ebene übersprungen. Hier ist die Ausgabe dieses Codes:

<?xml version="1.0" ?>
<zero>
  <First>
    <second>
      <third-num>1</third-num>
      <third-def>object001</third-def>
      <third-len>458</third-len>
    </second>
    <second>
      <third-num>3</third-num>
      <third-def>object003</third-def>
      <third-len>998</third-len>
    </second>
  </First>
</zero>

Nun, wenn ich den Kommentar entkommentiereelem2.clear() Zeile, das Skript funktioniert perfekt, aber die Ausgabe ist weniger schön, da es alle entfernt hältzweite Ebenen:

<?xml version="1.0" ?>
<zero>
  <First>
    <second>
      <third-num>1</third-num>
      <third-def>object001</third-def>
      <third-len>458</third-len>
    </second>
    <second/>
    <second/>
  </First>
</zero>

Hat jemand eine Ahnung warum meineelement.remove() Aussage ist falsch?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage