您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在python xml.etree.ElementTree中的迭代器中删除节点

如何在python xml.etree.ElementTree中的迭代器中删除节点

您无法在不知道父节点的情况下删除节点,但是该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())内部循环中都替换了它的用法

python 2022/1/1 18:45:52 有429人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶