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

如何用Python将嵌套XML转换为CSV?问题排查与实现

XML转CSV:如何展开嵌套字典并完整保留所有标签?

我需要写一个Python程序,能接收任意XML文件作为输入,将其转换为CSV文件且不丢失任何XML标签/元素,可以使用任意Python工具。我尝试了xmltodict、json、csv和pandas模块,已经成功读取XML并将其转换为字典,但无法将该字典转换为可写入CSV的列表,确保所有XML字段都被捕获。

示例XML文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <tag_1>
    <tag_2>
      <date value="06-30-2023">
        <data>
          <tag_3>val_3</tag_3>
          <tag_4>val_4</tag_4>
          <tag_5>val_5_1 &amp; val_5_2</tag_5>
          <tag_6>-0.157</tag_6>
        </data>
        <data>
          <tag_3>val_3</tag_3>
          <tag_4>val_4_2</tag_4>
          <tag_5>val_5_1</tag_5>
          <tag_6>-0.173</tag_6>
        </data>
      </date>
    </tag_2>
    <tag_7>
      <date value="06-30-2023">
        <data><tag_3>val_3</tag_3><tag_4>val_4</tag_4><tag_5>val_5_1 &amp; val_5_2</tag_5><tag_6>-0.157</tag_6>
        </data>
        <data><tag_3>val_3</tag_3><tag_4>val_4_2</tag_4><tag_5>val_5_1</tag_5><tag_6>-0.173</tag_6>
        </data>
      </date>
    </tag_7>
  </tag_1>

转换后的字典

{'tag_1': 
  {'tag_2': 
    {'date': 
      {'@value': '06-30-2023', 
       'data': [{'tag_3': 'val_3', 'tag_4': 'val_4', 'tag_5': 'val_5_1 & val_5_2', 'tag_6': '-0.157'}, 
                {'tag_3': 'val_3', 'tag_4': 'val_4_2', 'tag_5': 'val_5_1', 'tag_6': '-0.173'}
           ]
      }
     }, 
   'tag_7': 
    {'date': 
      {'@value': '06-30-2023', 
       'data': [{'tag_3': 'val_3', 'tag_4': 'val_4', 'tag_5': 'val_5_1 & val_5_2', 'tag_6': '-0.157'}, 
                {'tag_3': 'val_3', 'tag_4': 'val_4_2', 'tag_5': 'val_5_1', 'tag_6': '-0.173'}
               ]
      }
    }
  }
}

期望的CSV输出

tag_1,tag_2,date,data,tag_3,tag_4,tag_5,tag_6
tag_1,tag_2,06-30-2023,data,val_3,val_4,val_5_1 & val_5_2,-0.157
tag_1,tag_2,06-30-2023,data,val_3,val_4_2,val_5_1,-0.173
tag_1,tag_7,06-30-2023,data,val_3,val_4,val_5_1 & val_5_2,-0.157
tag_1,tag_7,06-30-2023,data,val_3,val_4_2,val_5_1,-0.173

当前尝试的代码

import xmltodict
import json
import csv
import pandas as pd

with open("file_01.xml", "r", encoding="utf-8") as xml_fh:
    str_xml = xml_fh.read()

print(f"str_xml={type(str_xml)}={str_xml}")

dict_xml = xmltodict.parse(str_xml)
print(f"dict_xml={type(dict_xml)}={dict_xml}")
df = pd.DataFrame.from_dict(dict_xml, orient='index')
df.to_csv('file_01.csv', index = False)

实际得到的结果

tag_2,tag_7
"{'date': {'@value': '06-30-2023', 'data': [{'tag_3': 'val_3', 'tag_4': 'val_4', 'tag_5': 'val_5_1 & val_5_2', 'tag_6': '-0.157'}, {'tag_3': 'val_3', 'tag_4': 'val_4_2', 'tag_5': 'val_5_1', 'tag_6': '-0.173'}]}}","{'date': {'@value': '06-30-2023', 'data': [{'tag_3': 'val_3', 'tag_4': 'val_4', 'tag_5': 'val_5_1 & val_5_2', 'tag_6': '-0.157'}, {'tag_3': 'val_3', 'tag_4': 'val_4_2', 'tag_5': 'val_5_1', 'tag_6': '-0.173'}]}}"

请问我遗漏了什么?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:42:04