You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup解析XML时删除含特定子标签的<x>标签

解决方法:用BeautifulSoup删除包含子标签的标签

嘿,这个需求很明确,我来一步步教你实现:

首先,我们需要用BeautifulSoup解析XML,然后筛选出所有包含标签(不管是直接子标签还是嵌套在其他标签里的)的标签,最后把它们彻底删除。

完整代码示例

from bs4 import BeautifulSoup

# 你的示例XML内容
xml_content = """<x id = '123'> <b><c>abcd</c> </b> </x> <x id ='456'><z></z> </x> <x id ='567'><c>def</c> </x>"""

# 用XML解析器解析内容(注意要指定'xml'解析器,避免HTML解析的问题)
soup = BeautifulSoup(xml_content, 'xml')

# 找到所有<x>标签
x_tags = soup.find_all('x')

# 遍历每个<x>标签,检查是否包含<c>后代标签
for x in x_tags:
    # 如果找到<c>标签(不管层级),就删除这个<x>标签
    if x.find('c'):
        x.decompose()

# 输出处理后的XML内容
print(soup.prettify())

代码解释

  • 解析XML:这里用'xml'解析器而不是默认的HTML解析器,这样能更好地处理XML的标签结构,避免解析错误。
  • 筛选标签:soup.find_all('x')会获取所有的标签。
  • 检查标签:x.find('c')会在当前标签的所有后代中查找第一个标签,如果存在就返回该标签,否则返回None。
  • 删除标签:x.decompose()会彻底删除这个标签及其内部的所有内容,而不仅仅是移除标签保留内容。

运行结果

处理后剩下的XML内容就是:

<?xml version="1.0" encoding="utf-8"?>
<x id="456">
 <z/>
</x>

内容的提问来源于stack exchange,提问作者doomsday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:57:47