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

使用BeautifulSoup解析XML:提取href并标记主parent标签结尾

提取XML中herf属性值并在每个parent标签结束时添加分隔符

首先得提个细节:你提供的XML里子标签的属性是herf(不是标准的href),这一点在代码里必须对应上,不然会提取不到任何内容。另外你的现有代码只是打印了匹配到的标签对象,既没提取属性值,也没处理分隔符的需求。

下面是修正后的代码,完美实现你要的效果:

from bs4 import BeautifulSoup

# 先把你的XML内容整理成更易解析的格式
xml_content = """
<root> 
  <parent id1='1111'> 
    <child herf='xxx'/> 
    <child herf ='yyyy'/> 
  </parent> 
  <parent id1='22222'> 
    <child herf='zzzz'/> 
    <child herf ='tttt'/> 
  </parent> 
  <parent id1='33333'> 
    <child herf='wwww'/> 
    <child herf ='qqqqq'/> 
    <parent id1='4444'> 
      <child herf='ssss'/> 
      <child herf ='uuuu'/> 
    </parent> 
    <parent id1='55555'> 
      <child herf='oooo'/> 
      <child herf ='pppp'/> 
    </parent> 
  </parent>
  <parent id1='6666'> 
    <child herf='mmmm'/> 
    <child herf ='nnnnn'/> 
  </parent> 
</root>
"""

soup = BeautifulSoup(xml_content, "xml")

# 递归遍历所有parent标签(包括嵌套的子parent)
def process_parent(parent):
    # 提取当前parent下所有child的herf值,用空格拼接
    href_str = ' '.join([child.get('herf') for child in parent.find_all('child')])
    # 输出值和分隔符
    print(f"{href_str} ----- ", end='')
    # 处理当前parent内部的子parent
    for sub_parent in parent.find_all('parent', recursive=False):
        process_parent(sub_parent)

# 启动处理root下的所有顶层parent
for top_parent in soup.root.find_all('parent', recursive=False):
    process_parent(top_parent)

代码说明:

  • 用递归函数process_parent处理每个parent标签,不管它是顶层还是嵌套的子parent
  • 先提取当前parent下所有child的herf值,用空格拼接成字符串
  • 输出拼接后的内容,紧接着输出-----分隔符
  • 递归处理当前parent内部的子parent,确保所有层级的parent都被覆盖

运行这段代码后,输出会和你期望的格式一致:

xxx yyyy ----- zzzz tttt ----- wwww qqqqq ----- ssss uuuu ----- oooo pppp ----- mmmm nnnnn ----- 

如果你的需求是只处理顶层parent,忽略嵌套的子parent,可以去掉递归逻辑,简化成这样:

from bs4 import BeautifulSoup

soup = BeautifulSoup(xml_content, "xml")

for top_parent in soup.root.find_all('parent', recursive=False):
    href_str = ' '.join([child.get('herf') for child in top_parent.find_all('child')])
    print(f"{href_str} ----- ", end='')

这段代码的输出会是:

xxx yyyy ----- zzzz tttt ----- wwww qqqqq ----- mmmm nnnnn ----- 

你可以根据实际需求选择对应的版本~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:16:07