奇怪的 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
可能会帮助遇到同样问题的人
我在尝试删除元素时使用 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
可能会帮助遇到同样问题的人