简体   繁体   English

在python中以特定顺序解析xml标签

[英]parsing xml tags in a specific order in python

I want to load some tags with a specified order from an xml file into python as below: 我想将指定顺序的一些标签从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>

The way that I know is ugly so please let me know if there is a better way: 我知道的方式很丑陋,所以请告诉我是否有更好的方法:

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

... and the same for testcases ...和测试用例相同

Sort the test sets by their order attribute: 按测试集的订单属性对其排序:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM