首页 > 解决方案 > 如何将 XML 的值放在列表中?

问题描述

我有一个如下所示的 XML 文件,我正在尝试获取包含简单列表中的值的所有“标题”。

xml1 = '''
    <Record>
        <RecordID>London01</RecordID>
        <Location>London</Location>
        <Date>07-09-2020</Date>
        <Time>08u53m45s</Time>
        <Version>2.0.1</Version>
        <Version_2>v1.9</Version_2>
    <Max_30e>
        <I_25Hz_1s>56.40</I_25Hz_1s>
        <I_25Hz_2s>7.44</I_25Hz_2s>
    </Max_30e>
    <Max_50e>
        <I_75Hz_1s>1.56</I_75Hz_1s>
        <I_75Hz_2s>0.36</I_75Hz_2s>
    </Max_50e>
    <Sample>
        <Vehicleid>5664</Vehicleid>
        <NumberY>2742</NumberY>
        <NumberX>SNG</NumberX>
        <NumberZ>NSR</NumberZ>
    </Sample>
    <Sample>
        <Vehicleid>1664</Vehicleid>
        <NumberY>4201</NumberY>
        <NumberX>ICM</NumberX>
        <NumberZ>NSR</NumberZ>
    </Sample>
</Record>'''

这是我尝试过的:

root = ET.fromstring(xml1)
values = []
for child in root:
    values.append(child.tag)
    for child1 in child:
        values.append(child1.tag)

print(values)

这是我当前的输出:

['RecordID', 'Location', 'Date', 'Time', 'Version', 
'Version_2', 'Max_30e', 'I_25Hz_1s', 'I_25Hz_2s', 'Max_50e', 
'I_75Hz_1s', 'I_75Hz_2s', 'Sample', 'Vehicleid', 'NumberY', 
'NumberX', 'NumberZ', 'Sample', 'Vehicleid', 'NumberY', 
'NumberX', 'NumberZ']

这是我想要的输出:

['RecordID', 'Location', 'Date', 'Time', 'Version', 
'Version_2', 'I_25Hz_1s', 'I_25Hz_2s',  'I_75Hz_1s', 'I_75Hz_2s', 
'Vehicleid', 'NumberY', 'NumberX', 'NumberZ', 'Vehicleid', 
'NumberY', 'NumberX', 'NumberZ']

标签: pythonxmllist

解决方案


你可以使用一个标志

for child in root:
    has_child=False
    for child1 in child:
        has_child=True
        values.append(child1.tag)
    if not has_child:
        values.append(child.tag)

推荐阅读