什么可以改变Java生成的XML文件中元素属性的顺序?
Posted
技术标签:
【中文标题】什么可以改变Java生成的XML文件中元素属性的顺序?【英文标题】:What can change the order of elements' attributes in generated XML file by Java? 【发布时间】:2019-06-06 07:09:34 【问题描述】:我使用Jaxb2Marshaller
和XMLStreamWriter
从XSD
的Java POJO-s 生成XML 文件。
而且我意识到如果我在不同的环境中运行我的应用程序,元素中属性的顺序是不同的。
我还意识到,在我的机器中它使用与 XSD 中相同的顺序,而在其他机器中它看起来使用降序的字母数字顺序。
但我无法证明这个描述。当然是字母数字顺序,但很有可能。
什么可能导致此订单更改?
我知道属性的顺序在 XML 中应该无关紧要,但真的没有解决方案可以在 Java 中为元素的属性设置顺序吗?当然可以使用任何类型的库。
【问题讨论】:
"我知道属性的顺序在 XML 中应该无关紧要" 对。那你为什么在乎呢? 因为我很好奇! 【参考方案1】:我会检查 HashMaps 或 HashSets 是否参与处理(以及类似的集合/类...)。
order of the elements of the iterator of these collections are not defined,可以在 JVM versions and imlementations 之间以不同方式实现
如果涉及数据库选择,则元素的顺序可以不同(按供应商、版本、机器、状态),当没有使用明确的“order by”时。例如。在 postgresql 上,在我的电脑上 the last touched elements come first, then the others
【讨论】:
【参考方案2】:JAXB 使用反射进行编组。通过反射返回的字段列表未按任何特定顺序排序(请参阅here)。因此,在编组时,属性的顺序不一定反映 XSD 或 Java POJO 中的顺序。最有可能的是,不同操作系统上的不同 Java 版本可能会以不同的方式实现反射,因此顺序可能会发生变化。
如果您只需要在不同的安装中保持一致,请使用@XMLAccessorOrder
按字母顺序对它们进行排序。
This 也可能会有所帮助。
【讨论】:
以上是关于什么可以改变Java生成的XML文件中元素属性的顺序?的主要内容,如果未能解决你的问题,请参考以下文章