gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:24:05 28 4
gpt4 key购买 nike

如何删除当前节点,同时通过getiterator()函数从根开始遍历所有节点?

import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()

for node in root.getiterator():
#if some condition:
#remove(node)

最佳答案

你不能在不知道父节点的情况下删除节点,但是 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)

请注意,虽然 Element.getiterator() 的纯 Python 实现返回一个列表对象,但在 ElementTree 模块的 C 实现中(在 Python 2 上单独导入,在 Python 3 上透明导入如果可用)getiterator() 方法返回一个需要复制的实时生成器。

最重要的是,Element.getiterator() 方法已在 Python 3.2 中弃用,并将在 Python 3.9 中完全删除。我在外循环中用 node.iter() 替换了它的使用,在内部循环中用 list(node.iter()) 替换了它。

关于python - 如何在 python xml.etree.ElementTree 中删除迭代器内的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19419754/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com