gpt4 book ai didi

python - etree xml解析和删除

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:42 55 4
gpt4 key购买 nike

如何删除或移除 server1 的所有条目,包括标签?我尝试使用 etree 删除功能,但它没有帮助

  <hosts>
<host instances="" name="*" roles="alpha">
<tags/>
</host>
<host instances="" name="server1" id="alpha,beta">
<tags>
<tag app-id="1" instance="1" name="alpha"/>
<tag app-id="2" instance="2" name="beta"/>
</tags>
</host>
<host instances="" name="server2" id="beta,gama">
<tags>
<tag app-id="1" instance="1" name="beta"/>
<tag app-id="2" instance="2" name="gama"/>
</tags>
</host>
</hosts>


def main1(file=outfile):
tree = et.parse(file)
root = tree.getroot()
thingy = root.find('hosts')
for thing in thingy:
if "server1" in thing.get('name'):
root.remove(thing)
#thingy.remove(thing)
print thingy

最佳答案

需要父对象从 HTML/XML 中移除其子对象。

使用getparent()方法获取父级,然后使用remove()方法移除它的chid标签。

演示:

>>> import lxml.etree as PARSER
>>> root = PARSER.fromstring(data)
>>> root.xpath("//hosts/host[@name='server1']")
[<Element host at 0xb6d2ce6c>]
>>> a = root.xpath("//hosts/host[@name='server1']")
>>> for i in a:
... pp = i.getparent()
... pp.remove(i)
...
>>> PARSER.tostring(root, method="xml")

A. find 返回None 对象用于以下代码。

>>> thingy = root.find('hosts')
>>> thingy

这应该是 thingy = root.find('host')

B.使用xpath方法获取目标标签。

关于python - etree xml解析和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34335325/

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