这很简单
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
delete = False
for child in root:
if delete:
root.remove(child)
continue
if child.getchildren():
delete = True
我想要的是保留第一个孩子并删除所有后续孩子。
但这里只是"交替"元素被删除。
使用正常序列我们可以使用
for child in root[:]:
或在我们可以使用的对象的情况下
from copy import deepcopy
for child in deepcopy(root):
但是,如果我这样做,我就不会得到&root;' root'但只有副本的子实例,所以我不能用它来删除root的孩子。
请有任何想法吗?
PS:我使用child.getchildren()
因为我需要保留第一个有孩子的孩子。
修改
受Ashalynd在下面评论的启发,我尝试了简单的切片
for child in root[:]:
有效。我一直认为,由于root
是一个实例,切片不会起作用。
但现在我想知道为什么以下没有用?
from copy import copy
for child in copy(root):
因为浅拷贝本质上是切片。
答案 0 :(得分:1)
如果您需要在某一点之后停止:
for i, child in enumerate(root):
if child.getchildren():
pruned_children = root[:i]
break
然后从那时开始使用pruned_children
。