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

使用Beautiful Soup提取XML同名标签数据并存入DataFrame的问题

现有代码问题说明

现有代码主要存在以下几个问题导致结果不符合预期:

  • 选用html.parser解析XML结构适配性差,且标签大小写处理逻辑容易出错
  • 查找附加字段时使用全局soup对象检索,会返回整个文档所有节点的附加字段,而非当前遍历到的<Value>节点下的字段
  • 直接取value.uniquealias.text只会返回第一个<UniqueAlias>标签的内容,无法适配两个标签顺序不固定的场景
  • 按索引取附加字段值完全依赖字段出现顺序,一旦不同<Value>节点下的附加字段数量/顺序发生变化,就会出现取值错位

正确实现方案

首先安装依赖(如果未安装):

pip install beautifulsoup4 lxml pandas

完整代码如下:

import pandas as pd
from bs4 import BeautifulSoup

# 读取响应内容
text = response.content
# 用lxml-xml解析器处理XML,自动保留标签大小写、识别CDATA内容
soup = BeautifulSoup(text, "lxml-xml")

data = []
# 遍历所有Value节点
for value in soup.find_all('Value'):
    # 1. 提取ref属性
    ref_id = value['ref']
    
    # 2. 提取ORG值:遍历所有UniqueAlias筛选以ORG=开头的内容
    org_val = None
    for alias in value.find_all('UniqueAlias'):
        alias_text = alias.text.strip()
        if alias_text.startswith('ORG='):
            org_val = alias_text.split('=', 1)[1]
            break
    
    # 3. 提取Hierarchy标签文本
    hierarchy_val = value.find('Hierarchy').text.strip() if value.find('Hierarchy') else None
    
    # 4、5. 按label属性提取对应附加字段,不依赖顺序
    country_val = None
    prstatus_val = None
    for field in value.find_all('AdditionalField'):
        label = field.get('label', '')
        if label == 'Country':
            country_val = field.text.strip()
        elif label == 'PrStatus':
            prstatus_val = field.text.strip()
    
    data.append([ref_id, org_val, hierarchy_val, country_val, prstatus_val])

# 生成DataFrame
df = pd.DataFrame(data, columns=['ID', 'Org', 'Hierarchy', 'Country', 'PrStatus'])
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:39:01