Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中按特定顺序解析xml标记_Python_Xml_Parsing - Fatal编程技术网

在python中按特定顺序解析xml标记

在python中按特定顺序解析xml标记,python,xml,parsing,Python,Xml,Parsing,我想按指定顺序将一些标记从xml文件加载到python中,如下所示: <data> <testset name="ts1" order="1" descrption="this is ts1 descrption"> <testcase name="tc1" order="1" /> <testcase name="tc2" order="2" /> </testset> <

我想按指定顺序将一些标记从xml文件加载到python中,如下所示:

<data>
    <testset name="ts1" order="1" descrption="this is ts1 descrption">
        <testcase name="tc1" order="1" />
        <testcase name="tc2" order="2" />
    </testset>

    <testset name="ts2" order="2" descrption="this is ts2 descrption">
        <testcase name="tc3" order="1" />
        <testcase name="tc4" order="2" />
    </testset>
</data>

我知道的方式很难看,所以请告诉我是否有更好的方式:

class TS():
    def __init__(self, name, order):
        self.name = name
        self.order = order

import xml.etree.ElementTree as ET
def parseXML():
    ts_arr = []
    tree = ET.parse('test_specs.xml')
    root = tree.getroot()
    for testset in root.iter('testset'):
        i = 0
        while i<len(ts_arr):
            if testset.get('order')<ts_arr[i].order:
                        ts_arr.append(i, TS(testset.get('name'),testset.get('order')))
                        break
            i += 1
class TS():
定义初始化(自身、名称、顺序):
self.name=名称
self.order=order
将xml.etree.ElementTree作为ET导入
def parseXML():
ts_arr=[]
tree=ET.parse('test_specs.xml'))
root=tree.getroot()
对于root.iter('testset')中的testset:
i=0

而i则按顺序属性对测试集进行排序:

root = tree.getroot()
testsets = root.findall('testset')

for testset in sorted(testsets, key=lambda ts: int(ts.attrib['order'])):
    # test sets are looped over in the order specified in the `order` attributes
    testcases = testset.findall('testcase')
    for testcase in sorted(testcases, key=lambda ts: int(ts.attrib['order'])):
        # test cases are looped over in the order specified

精彩的。百分之百的成功。谢谢