gpt4 book ai didi

python - 在 python etree 中对 XML 进行排序

转载 作者:太空狗 更新时间:2023-10-29 20:42:14 29 4
gpt4 key购买 nike

我知道之前有人问过这个问题,但我正在努力让它与我的示例一起使用,非常感谢您的帮助。我想要实现的目标似乎很简单:我有 2 个文件,1 个类似于下面的文件,第二个几乎相同,只是它只有 LAYER,然后是 TEST NAME - 即。没有主人。

<MASTER>
<LAYER NAME="LAYER B">
<TEST NAME="Soup1">
<TITLE>Title 2</TITLE>
<SCRIPTFILE>PAth 2</SCRIPTFILE>
<ASSET_FILE PATH="Path 22" />
<ARGS>
<ARG ID="arg_21">some_Arg11</ARG>
<ARG ID="arg_22">some_Arg12</ARG>
</ARGS>
<TIMEOUT OSTYPE="111">1200</TIMEOUT>
</TEST>

<TEST NAME="Bread2">
<TITLE>Title 1</TITLE>
<SCRIPTFILE>PAth 1</SCRIPTFILE>
<ASSET_FILE PATH="Path 11" />
<ARGS>
<ARG ID="arg_11">some_Arg12</ARG>
<ARG ID="arg_12">some_Arg22</ARG>
</ARGS>
<TIMEOUT OSTYPE="2222">1000</TIMEOUT>
</TEST>
</LAYER>
<LAYER NAME="LAYER A">
<TEST NAME="Soup2">
<TITLE>Title 2</TITLE>
<SCRIPTFILE>PAth 2</SCRIPTFILE>
<ASSET_FILE PATH="Path 22" />
<ARGS>
<ARG ID="arg_21">some_Arg11</ARG>
<ARG ID="arg_22">some_Arg12</ARG>
</ARGS>
<TIMEOUT OSTYPE="111">1200</TIMEOUT>
</TEST>

<TEST NAME="Bread2">
<TITLE>Title 1</TITLE>
<SCRIPTFILE>PAth 1</SCRIPTFILE>
<ASSET_FILE PATH="Path 11" />
<ARGS>
<ARG ID="arg_11">some_Arg12</ARG>
<ARG ID="arg_12">some_Arg22</ARG>
</ARGS>
<TIMEOUT OSTYPE="2222">1000</TIMEOUT>
</TEST>
</LAYER>
</MASTER>

我要做的就是根据名称对这些文件进行排序,尊重各个层。

在上面的场景中,A 层应该在 B 层之前,并且在每一层中,它们应该按 NAME 排序,因此 Bread before Soup。对于我的第二个场景,我没有这些子层。

<LAYER>
<TEST NAME="Soup1">
<TITLE>Title 2</TITLE>
<SCRIPTFILE>PAth 2</SCRIPTFILE>
<ASSET_FILE PATH="Path 22" />
<ARGS>
<ARG ID="arg_21">some_Arg11</ARG>
<ARG ID="arg_22">some_Arg12</ARG>
</ARGS>
<TIMEOUT OSTYPE="111">1200</TIMEOUT>
</TEST>

<TEST NAME="Bread2">
<TITLE>Title 1</TITLE>
<SCRIPTFILE>PAth 1</SCRIPTFILE>
<ASSET_FILE PATH="Path 11" />
<ARGS>
<ARG ID="arg_11">some_Arg12</ARG>
<ARG ID="arg_12">some_Arg22</ARG>
</ARGS>
<TIMEOUT OSTYPE="2222">1000</TIMEOUT>
</TEST>
</LAYER>

我希望它们按测试名称排序。

在此先感谢你们的帮助。

最佳答案

使用 ElementTree你可以这样做:

import xml.etree.ElementTree as ET

def sortchildrenby(parent, attr):
parent[:] = sorted(parent, key=lambda child: child.get(attr))

tree = ET.parse('input.xml')
root = tree.getroot()

sortchildrenby(root, 'NAME')
for child in root:
sortchildrenby(child, 'NAME')

tree.write('output.xml')

关于python - 在 python etree 中对 XML 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25338817/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com