您无法在不知道父节点的情况下删除节点,但是该
xml.etree软件包无法为您提供从给定节点访问父节点的任何方式。
解决此问题的唯一方法是匹配父节点:
for node in root.iter(): if some_condition_matches_parent: for child in list(node.iter()): if some_condition_matches_child: node.remove(child)
如果切换到
lxml库(该库实现相同的API,但具有其他增强功能),则 可以 从任何给定节点检索父节点:
node.getparent().remove(node)
注意,虽然纯Python实现
Element.getiterator()返回一个列表对象,但在ElementTree模块的C实现中(在Python
2上单独导入,如果可用,则在Python 3上透明导入),该
getiterator()方法返回一个实时生成器,该生成器需要一个副本制作。
最重要的是,该
Element.getiterator()方法已在Python 3.2中弃用,并将在Python
3.9中完全删除。我
node.iter()在外部循环和
list(node.iter())内部循环中都替换了它的用法。



