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

如何用Python BeautifulSoup分离XML中同名外层与嵌套标签?

解决XML嵌套标签提取问题

首先得先修正你给出的XML语法错误——原XML里最外层的<tag>用了</first>闭合,这会导致解析失败,修正后的合法XML应该是这样:

<test name='something'>
  <tag max='10' min='20'>
    <tag max='5' min='20'/>
    <tag max='5' min='20'/>
  </tag>
</test>

接下来我用两种常用的Python工具库,演示如何精准提取第一个外层<tag>的信息,再提取它内部的嵌套<tag>:


方法一:用lxml库(高效支持XPath)

lxml是处理XML的老牌高效库,XPath查询能帮你精准定位元素范围。

步骤1:先安装库(如果没装的话)

pip install lxml

步骤2:提取代码示例

from lxml import etree

# 修正后的XML内容
xml_content = """
<test name='something'>
  <tag max='10' min='20'>
    <tag max='5' min='20'/>
    <tag max='5' min='20'/>
  </tag>
</test>
"""

# 解析XML
root = etree.fromstring(xml_content)

# 定位第一个外层<tag>
outer_tag = root.find(".//tag[1]")

# 获取外层<tag>的属性
outer_attrs = outer_tag.attrib
print("外层<tag>属性:", outer_attrs)  # 输出: {'max': '10', 'min': '20'}

# 只提取外层<tag>的直接子<tag>(关键:用./限定范围为直接子元素)
inner_tags = outer_tag.findall("./tag")

# 遍历输出内部标签属性
for idx, tag in enumerate(inner_tags, 1):
    print(f"第{idx}个内部<tag>属性:", tag.attrib)

方法二:用BeautifulSoup库(语法更直观)

如果你更习惯简洁的API,BeautifulSoup也是很好的选择:

步骤1:安装依赖

pip install beautifulsoup4 lxml

步骤2:提取代码示例

from bs4 import BeautifulSoup

# 修正后的XML内容
xml_content = """
<test name='something'>
  <tag max='10' min='20'>
    <tag max='5' min='20'/>
    <tag max='5' min='20'/>
  </tag>
</test>
"""

# 解析XML
soup = BeautifulSoup(xml_content, "lxml-xml")

# 找到第一个外层<tag>
outer_tag = soup.find("tag")

# 获取外层标签属性
outer_attrs = outer_tag.attrs
print("外层<tag>属性:", outer_attrs)

# 关键:用recursive=False限定只找直接子标签,避免递归获取所有后代
inner_tags = outer_tag.find_all("tag", recursive=False)

# 遍历输出内部标签
for idx, tag in enumerate(inner_tags, 1):
    print(f"第{idx}个内部<tag>属性:", tag.attrs)

核心思路其实很简单:不管用哪种工具,只要限定查找范围为「当前元素的直接子元素」,而不是默认的所有后代元素,就能避免拿到无关内容,精准提取你需要的外层和内层标签信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:46:28