奇怪的 ElementTree remove() 行为

Strange ElementTree remove() behaviour

我在尝试删除元素时使用 elementTree 时遇到一个奇怪的问题, 好像只是导航,只删除奇数元素

这是代码

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>

好吧,由于在迭代同一个列表时删除元素会产生问题, 解决方法是遍历一个副本 (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

可能会帮助遇到同样问题的人