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

使用Python与Pandas从嵌套XML提取指定属性导出为CSV的问题

XML嵌套结构转指定字段CSV解决方案

核心需求

  • 从给定嵌套XML中仅提取指定字段输出为CSV,不输出多余属性
  • 需提取字段:CreationTime、FileType、SerialNumber、Check OCV(Check OCV需拼接数值和单位)
  • 期望输出样例:
CreationTime,FileType,SerialNumber,Check OCV
2020-09-28T09:42:07.3875529+02:00,Test Report,324,49.429V

原始XML结构样例

<TestReport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="33357fcc-edf2-3ad4-a6f2-588a9492f804" source="OI Stand" converter="irs_xml.xsl" version="1.6">
  <FileType>Test Report</FileType>
  <CreationTime>2020-09-28T09:42:07.3875529+02:00</CreationTime>
  <TestExecution start="2265.595799" time="68.619646" id="009b96f0-9d26-4226-9c9a-7364dcab0467" ts="2020-09-28T09:40:58">                     
    <Attr name="ProductNumber" type="String" value="11266" />        
    <Attr name="SerialNumber" type="Number" value="324" />      
    <TestSteps>
      <TestStep measid="CNID_0210" measname="UART Read Node ID" status="Passed" datatype="Boolean" value="True" stepname="[CNID_0210] UART Read Node ID" steptype="PassFailTest" start="2277.5219649" time="0.0280892" stepid="ID#:Ua1/2g1/6hGrTAABBUH5EC" group="[CNID] Config Node ID">
        <Attr name="ReadNodeId Cmd" type="String" value="RAC" />
        <Attr name="NodeId" type="String" value=" 255" />
      </TestStep>
      <TestStep measid="MOCV_1510" measname="Check OCV" status="Passed" datatype="Number" limlo="49.000" value="49.429" limhi="51.400" unit="V" stepname="[MOCV_1510] Check OCV" steptype="Test" start="2309.5348324" time="5.72E-05" stepid="ID#:pIldp+t98hG/wTz4Yu5AjB" group="[MOCV] Measure OCV" />
    </TestSteps>
    <PartNr />
  </TestExecution>
</TestReport>

调整后可直接运行的代码

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

# 解析XML文件
tree = ET.parse('324.irp')
root = tree.getroot()

# 初始化存储结果的字典
result = {}

# 提取根节点下的固定字段
result['CreationTime'] = root.find("CreationTime").text
result['FileType'] = root.find("FileType").text

# 提取Attr节点中指定字段
for attr_node in root.iter('Attr'):
    attr_name = attr_node.attrib.get('name')
    if attr_name == 'SerialNumber':
        result['SerialNumber'] = attr_node.attrib.get('value')
        # 找到目标后可提前终止循环提高效率
        break

# 提取TestStep节点中指定字段
for step_node in root.iter('TestStep'):
    meas_name = step_node.attrib.get('measname')
    if meas_name == 'Check OCV':
        val = step_node.attrib.get('value', '')
        unit = step_node.attrib.get('unit', '')
        result['Check OCV'] = f"{val}{unit}"
        # 找到目标后可提前终止循环提高效率
        break

# 转换为DataFrame并输出CSV
df = pd.DataFrame([result])
df.to_csv(r'C:\Users\PycharmProjects\pythonProject\output.csv', index=False)

代码逻辑说明

  • 全程仅匹配目标字段,不会输出多余属性
  • 匹配到目标节点后直接终止遍历,避免无效循环
  • 自动拼接Check OCV的数值和单位,符合输出要求
  • 后续需要新增提取字段时,只需在对应遍历分支中增加判断条件即可,扩展成本低

内容的提问来源于stack exchange,提问作者K.Stefan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:04