首页 > 解决方案 > 如何使用 python 和 BeautifulSoup 从 xml 中删除完整元素

问题描述

例如我有一个 XML

<parent class="alpha">
<child>
<subchild>
</subchild>
</child>
</parent>
<parent class="beta">
<child>
<subchild>
</subchild>
</child>
</parent>
<parent class="gamma">
<child>
<subchild>
</subchild>
</child>
</parent>

如果父元素中的类匹配,我想删除完整的父元素。比如说class="beta"。

然后我想要像这样更新的 XML。

<parent class="alpha">
<child>
<subchild>
</subchild>
</child>
</parent>
<parent class="gamma">
<child>
<subchild>
</subchild>
</child>
</parent>

我试过了,但无法得到想要的结果。

with open("path/to/xml","w") as fil2:
        Soup = soup.find_all("parent ",{'class':'beta'})
        for i in Soup:
                i.decompose()

标签: python-3.xxmlbeautifulsoupxml-parsing

解决方案


要保存没有指定标签的新文件,您可以使用以下示例:

from bs4 import BeautifulSoup


txt = '''<parent class="alpha">
<child>
<subchild>
</subchild>
</child>
</parent>
<parent class="beta">
<child>
<subchild>
</subchild>
</child>
</parent>
<parent class="gamma">
<child>
<subchild>
</subchild>
</child>
</parent>'''

soup = BeautifulSoup(txt, 'html.parser')

for p in soup.find_all("parent",{'class':'beta'}):
    p.decompose()

with open('new_file.xml', 'w') as f_out:
    print(soup, file=f_out)

保存new_file.xml内容:

<parent class="alpha">
<child>
<subchild>
</subchild>
</child>
</parent>

<parent class="gamma">
<child>
<subchild>
</subchild>
</child>
</parent>

推荐阅读