有没有可能在编写时阻止ElementTree对我的XML键排序

2024-06-06 16:59:15 发布

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

我的XML创建者有一个问题,我正在根据来自Maya的对象生成一大堆数据,最好能让我的属性键按照它们的写入顺序在文件中生成,而不是(非常恼人地)按字母顺序排序。在

我填充元素如下:

bodies = ET.SubElement(root, "bodies") 
myRp = [ET.Element("object", name=str("rootPoint"))]
myBodies = [ET.Element("object", name=str(cObj), type=checkCollisionType(cObj), padding="-2.5") for cObj in cObjects]
bodies.extend(myRp)
bodies.extend(myBodies)

我是这样写的:

^{pr2}$

我的结果应该是这样的:

<body name="" enabled="" template="">
    <object name="" />
    <object name="" collision_type="" padding=""/>
</body>

但是在元素树写下来之后,我得到了:

<bodies>
  <body enabled="" name="" template="">
    <object name=""/>
    <object name="" padding="" type=""/>
</bodies>

为了可读性和通用性,我真的想保留我原来的顺序。我发现有人重新设计了ElementTree模块,但它把很多事情都搞乱了

我搜遍了网络,还没有找到可行的解决办法。在

任何帮助都将不胜感激。在

干杯


Tags: name元素object顺序typebodyelementet
1条回答
网友
1楼 · 发布于 2024-06-06 16:59:15

以防万一有人有类似的问题,并正在寻找答案,我自己做了一个小黑客围绕这个问题。在

虽然XML文件中的属性顺序对于我们的系统来说并不重要,但它是最好的。最后,我所做的就是用字母标记每个属性。A、 因为这本词典是按字母顺序排列的,这对我很有用。在

例如:

myShadowMeshes = ET.Element("object", Aname=str(sObj), Benabled="true", Cshadow_caster='true')

然后我创建了一个函数,用正确的名称替换所有出现的这些名称:

^{pr2}$

这是我的解决方法,希望有人发现它有用:)

干杯

相关问题 更多 >