【问题标题】:How to place the values of an XML in a list?如何将 XML 的值放在列表中?
【发布时间】:2021-12-24 00:16:00
【问题描述】:

我有一个如下所示的 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']

【问题讨论】:

    标签: python xml list


    【解决方案1】:

    你可以使用标志

    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)
    

    【讨论】:

      【解决方案2】:

      如果您只是深入两层,那么这应该没问题。更深入将需要递归。您看到它们附加到您的值的原因是标题文本字段中有一个空格。

      values = []
      for child in root:
          if child.text.strip():
              values.append(child.tag)
          # Check for children
          for grandChild in child:
              if grandChild.text.strip():
                  values.append(grandChild.tag)
      
      print (values)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多