【问题标题】:Strange ElementTree remove() behaviour奇怪的 ElementTree remove() 行为
【发布时间】:2015-02-26 09:07:12
【问题描述】:

我在尝试删除元素时使用 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>

【问题讨论】:

    标签: python python-2.6


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2015-07-20
      • 2010-10-03
      相关资源
      最近更新 更多