(Python 3.2)
我正在使用etree
来解析一些XML。为此,我使用iterdescendants()
递归遍历文档。所以,像:
for elem in doc.iterdescendants():
if elem.tag == "tag":
pass # Further processing
有时,我处理一个父标记,其中包含我想要阻止在以后的递归中处理的子节点。摧毁孩子们可以吗?
在我的初步测试中,我尝试过:
for child in elem.getchildren(): child.clear()
由于某种原因,这会导致处理elem
之后的元素。就像元素被删除一样。
然后我尝试了这个,它起作用(因为它删除了父项及其子项,但不会导致父项的任何后续兄弟姐妹被跳过/受影响):
elem.clear()
有人可以对此有所了解吗?谢谢,
答案 0 :(得分:1)
我有以下代码代替你的代码,它似乎工作,删除所有子元素。我使用iterfind查找带有标记的所有后代并删除它们。
for element in doc.iterfind('.//%s'%tag):
element.getparent().remove(element)