python - 将 XML 转换为 CSV 文件

标签 python xml csv xpath elementtree

我有一个这样的 XML 文件:

<hierachy>
    <att>
        <Order>1</Order>
        <attval>Data</attval>
        <children>
            <att>
                <Order>1</Order>
                <attval>Studyval</attval>
            </att>
            <att>
                <Order>2</Order>
                <attval>Site</attval>
            </att>
        </children>
    </att>
    <att>
        <Order>2</Order>
        <attval>Info</attval>
        <children>
            <att>
                <Order>1</Order>
                <attval>age</attval>
            </att>
            <att>
                <Order>2</Order>
                <attval>gender</attval>
            </att>
        </children>
    </att>
</hierachy>

我正在尝试将其转换为 CSV 文件,如下所示:

Data,Studyval
Date,Site
Info,age
Info,gender

我的问题是,父名称和子名称都相同 - 'att''attval'。我如何告诉 Python 区分它们并给我输出?

我试过这个:

import xml.etree.cElementTree as ET

tree = ET.parse('input.xml')
rebase = tree.getroot()

list = []

for att in rebase.findall('att'):
        name = att.find('attval').text
        for each_att in att.findall('attval'):
            try:
                val = att.find('attval').text
                print name, val
            except AttributeError:
                print name

它打印了两次同样的东西。

最佳答案

不要使用findall 函数,因为它会在整棵树中寻找att 标签。只需按从上到下的顺序迭代树并获取其中的相关元素即可。

from xml.etree import ElementTree
tree = ElementTree.parse('input.xml')
root = tree.getroot()

for att in root:
    first = att.find('attval').text
    for subatt in att.find('children'):
        second = subatt.find('attval').text
        print('{},{}'.format(first, second))

给出:

$ python process.py 
Data,Studyval
Data,Site
Info,age
Info,gender

关于python - 将 XML 转换为 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31844713/

相关文章:

Python Boto 创建的 cloud-init #include 脚本未在 EC2 上运行

java - 使用 AWS Java SDK 获取 EC2 实例 XML 描述?

objective-c - Cocoa/Obj-C - 计算 XML 文件中的元素数量

sql-server - SQL 拆分制表符分隔列

python - 如何使用 Gdk3 从文件创建 PixBuf?

python -We ResourceWarning 没有错误

java - 处理同一组元素中包含的不同对象类型

Python - CSV 阅读器 - 无法读取所有行

python - Pandas 解析 csv 错误 - 预期 1 个字段找到 9

python - Buildbot(来自 buildbot.net): iCloud email not working as Status Target