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

如何从XML提取指定元素并保存为Pandas DataFrame?

XML元素提取到Pandas DataFrame解决方案

首先需要明确XML的结构,以下是假设的示例XML结构(如果你的文件结构不同,只需调整代码中的节点路径即可):

示例XML结构:

<root>
  <stroke>
    <stroke-number>S001</stroke-number>
    <contract-number>C001</contract-number>
    <productdesc>Sample Product</productdesc>
    <stroke-label>
      <label-ref>L001</label-ref>
      <label-category>Category A</label-category>
      <label-type>Type X</label-type>
      <label-order>1</label-order>
    </stroke-label>
  </stroke>
  <stroke>
    <stroke-number>S002</stroke-number>
    <contract-number>C002</contract-number>
    <productdesc>Another Product</productdesc>
    <stroke-label>
      <label-ref>L002</label-ref>
      <label-category>Category B</label-category>
      <label-type>Type Y</label-type>
      <label-order>2</label-order>
    </stroke-label>
  </stroke>
</root>

步骤1:导入所需库

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

步骤2:解析XML并提取目标元素

# 解析XML文件,替换为你的实际文件路径
tree = ET.parse('your_file.xml')
root = tree.getroot()

# 初始化存储数据的列表
extracted_data = []

# 遍历所有stroke节点(XPath路径根据实际结构调整)
for stroke_node in root.findall('.//stroke'):
    # 提取顶层元素,加入空值判断避免节点缺失报错
    stroke_num = stroke_node.find('stroke-number').text if stroke_node.find('stroke-number') is not None else None
    contract_num = stroke_node.find('contract-number').text if stroke_node.find('contract-number') is not None else None
    product_desc = stroke_node.find('productdesc').text if stroke_node.find('productdesc') is not None else None
    
    # 提取stroke-label下的子元素
    label_node = stroke_node.find('stroke-label')
    label_ref = label_node.find('label-ref').text if label_node and label_node.find('label-ref') is not None else None
    label_category = label_node.find('label-category').text if label_node and label_node.find('label-category') is not None else None
    label_type = label_node.find('label-type').text if label_node and label_node.find('label-type') is not None else None
    label_order = label_node.find('label-order').text if label_node and label_node.find('label-order') is not None else None
    
    # 将单条数据存入列表
    extracted_data.append({
        'stroke-number': stroke_num,
        'contract-number': contract_num,
        'productdesc': product_desc,
        'label-ref': label_ref,
        'label-category': label_category,
        'label-type': label_type,
        'label-order': label_order
    })

# 转换为Pandas DataFrame
result_df = pd.DataFrame(extracted_data)

步骤3:验证与保存结果

# 查看提取结果
print(result_df.head())

# 保存为CSV文件(可选)
result_df.to_csv('extracted_stroke_data.csv', index=False, encoding='utf-8')

关键注意事项

  • 替换代码中的your_file.xml为你的实际XML文件路径。
  • 如果XML节点层级或名称与示例不同,调整findall和find中的XPath路径,比如节点嵌套更深时,使用./parent-node/stroke这类精确路径。
  • 代码中加入了节点存在性判断,避免因部分节点缺失导致运行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:35:20