2015-02-26 4 views
0

У меня странная проблема с использованием elementTree при попытке удалить элемент, Кажется, что это просто навигация и удаление только нечетных элементов.Strange ElementTree remove() поведение

Вот код

import xml.etree.ElementTree as ET 

tree = ET.parse('bug_remove.xml') 
root = tree.getroot() 

for element in root: 
    print element.tag 

print "remove all" 

for element in root: 
    print "remove element : "+element.tag 
    root.remove(element) 

print "remaining elements" 

for element in root: 
    print element.tag 

И выход:

element1 
element2 
element3 
element4 
element5 
element6 
=> remove all 
remove element : element1 
remove element : element3 
remove element : element5 
=> remaining elements 
element2 
element4 
element6 

Файл XML проанализирован:

<root> 
     <element1> 
     </element1> 
     <element2> 
     </element2> 
     <element3> 
     </element3> 
     <element4> 
     </element4> 
     <element5> 
     </element5> 
     <element6> 
     </element6> 
</root> 

ответ

0

Ну, так как удаление элемента, а итерация тот же список генерировать вопросы, Исправление состоит в том, чтобы перебирать копию (root [:]):

import xml.etree.ElementTree as ET 

tree = ET.parse('bug_remove.xml') 
root = tree.getroot() 

print "XML length : ", len(root) 

for element in root[:]: 
    print "remove element : "+element.tag 
    root.remove(element) 

print "remaining elements" 

for element in root: 
    print element.tag 

И выход:

XML length : 6 
remove element : element1 
remove element : element2 
remove element : element3 
remove element : element4 
remove element : element5 
remove element : element6 
remaining elements 

Может помочь кому-то, кто имеет такой же вопрос

Смежные вопросы