gpt4 book ai didi

python - ElementTree 删除元素

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:09 24 4
gpt4 key购买 nike

这里是 Python 菜鸟。想知道删除所有 updated 属性值为 true 的“profile”标签的最干净、最好的方法是什么。

我已经尝试了下面的代码,但它抛出了:SyntaxError("cannot use absolute path on element")

 root.remove(root.findall("//Profile[@updated='true']"))

XML:

<parent>
<child type="First">
<profile updated="true">
<other> </other>
</profile>
</child>
<child type="Second">
<profile updated="true">
<other> </other>
</profile>
</child>
<child type="Third">
<profile>
<other> </other>
</profile>
</child>
</parent>

最佳答案

如果你正在使用 xml.etree.ElementTree,你应该使用 remove()方法来删除节点,但这需要您有父节点引用。因此,解决方案:

import xml.etree.ElementTree as ET

data = """
<parent>
<child type="First">
<profile updated="true">
<other> </other>
</profile>
</child>
<child type="Second">
<profile updated="true">
<other> </other>
</profile>
</child>
<child type="Third">
<profile>
<other> </other>
</profile>
</child>
</parent>"""

root = ET.fromstring(data)
for child in root.findall("child"):
for profile in child.findall(".//profile[@updated='true']"):
child.remove(profile)

print(ET.tostring(root))

打印:

<parent>
<child type="First">
</child>
<child type="Second">
</child>
<child type="Third">
<profile>
<other> </other>
</profile>
</child>
</parent>

请注意,使用 lxml.etree 这会更简单一些:

root = ET.fromstring(data)
for profile in root.xpath(".//child/profile[@updated='true']"):
profile.getparent().remove(profile)

ET 是:

import lxml.etree as ET

关于python - ElementTree 删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39337042/

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