gpt4 book ai didi

python xml删除孙子或孙子

转载 作者:行者123 更新时间:2023-12-01 03:12:14 25 4
gpt4 key购买 nike

我一直在谷歌上搜索从 xml 文件中删除孙子的信息。但是,我还没有找到完美的解决方案。这是我的案例:

<tree>
<category title="Item 1">item 1 text
<subitem title="subitem1">subitem1 text</subitem>
<subitem title="subitem2">subitem2 text</subitem>
</category>

<category title="Item 2">item 2 text
<subitem title="subitem21">subitem21 text</subitem>
<subitem title="subitem22">subitem22 text</subitem>
<subsubitem title="subsubitem211">subsubitem211 text</subsubitem>
</category>
</tree>

在某些情况下,我想删除子项目。在其他情况下,我想删除 subsubitem。我知道我可以在当前给定的内容中这样做:

import xml.etree.ElementTree as ET

root = ET.fromstring(given_content)
# case 1
for item in root.getiterator():
for subitem in item:
item.remove(subitem)

# case 2
for item in root.getiterator():
for subitem in item:
for subsubitem in subitem:
subitem.remove(subsubitem)

当我知道目标节点的深度时,我可以用这种风格编写。如果我只知道要删除的节点的标签名称,我应该如何实现?伪代码:

import xml.etree.ElementTree as ET

for item in root.getiterator():
if item.tag == 'subsubitem' or item.tag == 'subitem':
# remove item

如果我执行root.remove(item),它肯定会返回错误,因为 item 不是 root 的直接子级。

编辑: 我无法安装任何 3rd-party-lib,因此我必须使用 xml 解决此问题。

最佳答案

我终于通过编写递归函数在 xml lib 上完成了这项工作。

def recursive_xml(root):
if root.getchildren() is not None:
for child in root.getchildren():
if child.tag == 'subitem' or child.tag == 'subsubitem':
root.remove(child)
else:
recursive_xml(child)

通过这样做,该函数将迭代 ET 中的每个节点并删除我的目标节点。

test_xml = r'''
<test>
<test1>
<test2>
<test3>
</test3>
<subsubitem>
</subsubitem>
</test2>
<subitem>
</subitem>
<nothing_matters>
</nothing_matters>
</test1>
</test>
'''
root = ET.fromstring(test_xml)
recursive_xml(root)

希望这对像我这样有限制要求的人有所帮助......

关于python xml删除孙子或孙子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42775335/

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