python中的XML解析列表和字典

2024-10-01 02:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python将一个XML文件解析成一个列表和字典

XML代码:

    <?xml version="1.0"?>
<TP name="TP03_WW35_13">
    <Class>
        <CDYN>
            <test name= "IA CDYN" PP="IA" Workload="PV">
                <Parameter name="temprature">
                    <value>100</value>
                </Parameter>
                <Parameter name="voltages">
                    <value>0.85</value>
                    <value>1.00</value>
                    <value>1.10</value>
                </Parameter>
                <Parameter name="Freq">
                    <value>0.8</value>
                    <value>1.2</value>
                </Parameter>
            </test>
            <test name= "GT CDYN" PP="GT" Workload="PV">
                <Parameter name="temprature">
                    <value>101</value>
                </Parameter>
                <Parameter name="voltages">
                    <value>0.85</value>
                </Parameter>
                <Parameter name="Freq">
                    <value>0.8</value>
                    <value>1.2</value>
                    <value>1.6</value>
                </Parameter>
            </test>
        </CDYN>
        <TDP>
            <test name="SDP" Workload="3Dmark Vantage GT1">
                <Parameter name="temprature">
                    <value>100</value>
                </Parameter>
            </test>
        </TDP>
        <Sicc>
            <test name="SA SICC" PP="SA">
                <Parameter name="temprature">
                    <value>102</value>
                </Parameter>
                <Parameter name="voltages">
                    <value>0.85</value>
                    <value>1.00</value>
                </Parameter>
            </test>
        </Sicc>
    </Class>
</TP>
  1. 起初,我想把这个测试作为一个列表,用我制作的测试列表创建者对我有效

  2. 基于该列表,我想创建一个函数,该函数将从列表中获取测试名称,并从其子项创建字典和列表

输出示例如我所愿:

^{pr2}$

结果是我可以看到有3个值,但只得到第一个值

我的代码:

def TestListCreator (root):
    TestList = []
    for Class in root.find('Class'):
        for Tests in Class:
           # TestList.append(Class.tag +Tests.attrib['name'] )
            TestList.append(Tests.attrib['name'] )
    print (TestList)
    return TestList

def main():
    import xml.etree.ElementTree as ET
    XML = ET.parse('1.xml') #parse the xml file into an elementtre
    root = XML.getroot()
    print root.tag + "=" + root.attrib['name']
    TestList = TestListCreator(root)
    print (TestList)


##    for country in root.findall(".*/CDYN/test[@name='IA CDYN']/Parameter"):
##    #for country in root.findall(".*/CDYN/test[@name=]/Parameter[@name=temprature]"):
##     rank = country.find('value').text
##     name = country.get('name')
##     print name, rank


    Vlist = []
    for country in root.findall(".*/CDYN/test[@name='IA CDYN']/Parameter"):
    #for country in root.findall(".*/CDYN/test[@name=]/Parameter[@name=temprature]"):
        #for Z in country.find('value'):
         #Vlist.append(country.attrib[])
         rank = country.find('value').text
         name = country.get('name')
         print name,rank

    print Vlist

Tags: nameintest列表forparametervalueroot