保留 XML 属性顺序?

Posted

技术标签:

【中文标题】保留 XML 属性顺序?【英文标题】:Preserving XML attribute order? 【发布时间】:2022-01-15 13:52:16 【问题描述】:

我知道过去有人问过这个问题,但它们都是几年前提出的。我想知道是否对 Python 模块(例如 lxml、minidom 或 etree)进行了任何更改,这将允许我们在不打补丁的情况下保留 XML 文件中的属性顺序。

我需要保留订单,因为我提供文件的程序依赖它。

如果没有更新,最简单的实现方法是什么?

【问题讨论】:

如果您提供文件的程序依赖于属性的顺序,那么该程序有一个应该修复的错误。 不幸的是,该程序是外部的,所以我对此无能为力。并且属性是数据非常相关的子元素的一部分。 您可以使用OrderedDict 来保留带有lxml 的属性顺序。见***.com/a/22596064/407651 除了@mzjn 的答案/评论:这个答案可能也很有趣:***.com/a/54034770/960592 @Ideogram:Python 3.8 中的 ElementTree 和 minidom 保留属性顺序:***.com/a/60176826/407651、***.com/a/61267614/407651 【参考方案1】:

属性排序的重要性不是在 XML 库的未来实现中要取消的技术限制。

Attribute order is insignificantXML Recommendation

请注意,开始标签中属性规范的顺序或 空元素标签不重要。

因此,您的设计不应基于 XML 中属性的任何特定顺序。

在极少数情况下,应用程序必须对 XML 属性进行排序,请参阅 XML Normalization Recommendation 或 Canonical XML Recommendation 中的 section on attribute processing。

【讨论】:

与库处理属性的方式一致:它们返回一个字典。 嘿,感谢您的链接和答案。不幸的是,我提供给它的程序不是我的,而且它是专有的。这正是我想知道这是否可能的原因。我确实了解 xml 协议及其存储方式。但我只是想知道这个选项是否被实施,考虑到这个问题已经被问了好几次了。

以上是关于保留 XML 属性顺序?的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5 在 XML 中生成随机属性顺序

Python读写XML后保持节点属性顺序不变

在不更改属性顺序的情况下获取 XML

Xml Jaxb 命名空间和属性顺序

struts.xml属性extends的执行顺序和剖析源码

xml Miva - 属性自定义显示顺序