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

如何将含标签、属性与文本的XML解析为Pandas DataFrame?

解决方案:提取XML多层属性与文本到Pandas DataFrame

我来帮你搞定这个XML转DataFrame的问题!你之前的困扰应该是没法同时关联父节点(<ABR>)的属性和子节点(<ABN>)的信息对吧?下面是清晰的实现步骤和代码,你可以直接套用,之后扩展其他字段也很方便:

核心思路

每个<ABR>节点对应一条完整的数据记录,我们需要:

  • 先提取<ABR>自身的属性(recordLastUpdatedDate、replaced)
  • 再定位该节点下的<ABN>子节点,提取它的属性(status、ABNStatusFromDate)和文本内容(ABN号码)
  • 把每条记录整理成字典,最后批量转换为DataFrame

完整代码示例

import xml.etree.ElementTree as et
import pandas as pd

# 解析XML文件
tree = et.parse('sample.xml')
root = tree.getroot()

# 初始化存储所有记录的列表
data_records = []

# 遍历每个ABR节点(每条数据的顶层容器)
for abr_node in root.findall('ABR'):
    # 提取ABR节点的属性
    abr_last_updated = abr_node.get('recordLastUpdatedDate')
    abr_replaced = abr_node.get('replaced')
    
    # 找到当前ABR下的ABN子节点
    abn_node = abr_node.find('ABN')
    if abn_node is not None:
        # 提取ABN的属性和文本内容
        abn_status = abn_node.get('status')
        abn_status_date = abn_node.get('ABNStatusFromDate')
        abn_number = abn_node.text.strip() if abn_node.text else None
        
        # 组装成单条记录的字典
        single_record = {
            'abr_record_last_updated_date': abr_last_updated,
            'abr_replaced': abr_replaced,
            'abn_status': abn_status,
            'abn_status_from_date': abn_status_date,
            'abn': abn_number
        }
        data_records.append(single_record)

# 转换为结构化DataFrame
df = pd.DataFrame(data_records)
print(df)

代码细节说明

  • 用root.findall('ABR')直接定位所有数据节点,能确保父节点ABR的属性和子节点ABN的信息一一对应(之前你用root.iter('ABN')会拿到所有ABN节点,但没法直接关联上层ABR的属性)
  • 用get()方法提取属性比直接访问attrib更灵活,属性不存在时会返回None,避免报错
  • 处理ABN文本时加strip()去除可能的空白字符,同时判断文本是否存在,增强鲁棒性

输出效果

运行代码后会得到你需要的结构化DataFrame:

abr_record_last_updated_date abr_replaced abn_status abn_status_from_date          abn
0                      20180216            N        ACT             19991101  11000000948
1                      20190531            N        CAN             20190501  11000002568

你可以按照同样的逻辑,继续提取其他字段(比如EntityType、BusinessAddress等),只需要在遍历ABR节点时,继续查找对应的子节点并提取属性/文本即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:28:02