我从 Stackoverflow 尝试了大约 15 个答案,但没有任何帮助。我想将任何(!)嵌套的 XML 文件转换为 CSV。我不想写在 XML 的程序直接元素中。网络上有许多在线服务,我可以上传任何 xml,也可以下载 CSV。我不需要说我想要什么具体的元素。
如果重复某些内容(经典示例 - 项目),我希望将一个项目放在一行中,每个数据都放在文档的页眉和页脚上。也许我们可以称之为笛卡尔积。很好的例子(我想要的)显示http://convertcsv.com/xml-to-csv.htm为“向下透视数据而不是展平”(步骤 2 中的可选)
我的 XML 示例:
<fav>
<inv>
<number>202101</number>
<item>
<q>50</q>
<note>AAA</note>
<more>999999999</more>
</item>
<adr>Bananos 15</adr>
<item>
<q>150</q>
<note>BBB</note>
<item_adr>Something...</item_adr>
</item>
<summary>
<sum>500</sum>
</summary>
</inv>
<inv>
<number>202102</number>
<item>
<q>99950</q>
<note>XXX</note>
<item_adr3>Appleos 50</item_adr3>
</item>
<item>
<q>150</q>
<note>YYY</note>
</item>
</inv>
</fav>
我想要什么,这个结果:
number,item/0/q,item/0/note,item/0/more,adr,summary/sum,item/0/item_adr3
202101,50,AAA,999999999,Bananos 15,500,
202101,150,BBB,,Bananos 15,500,
202102,99950,XXX,,,,Appleos 50
202102,150,YYY,,,,
我尝试使用 xmltodict。
inputfiles = list_all_xml_files(os.getcwd())
for file in inputfiles:
handle = open(file, "r", encoding='utf-8')
content = handle.read()
# https://github.com/martinblech/xmltodict
dict = xmltodict.parse(content)
结果是:
OrderedDict([('fav', OrderedDict([('inv', [OrderedDict([('number', '202101'), ('item', [OrderedDict([('q', '50'), ('note', 'AAA'), ('more', '999999999')]), OrderedDict([('q', '150'), ('note', 'BBB'), ('item_adr', 'Something...')])]), ('adr', 'Bananos 15'), ('summary', OrderedDict([('sum', '500')]))]), OrderedDict([('number', '202102'), ('item', [OrderedDict([('q', '99950'), ('note', 'XXX'), ('item_adr3', 'Appleos 50')]), OrderedDict([('q', '150'), ('note', 'YYY')])])])])]))])
但是,接下来呢?
我要求
- 展平数据
- 创建行(带有重复项目的组合(笛卡尔积?))
对于我的示例,我在 Stackoverflow 中发现的所有内容均不正确。
你能帮助我吗?我希望,我不是 Universum 解决问题的第一人。非常感谢...