2011-12-16 80 views
1

为什么相同的Java代码会生成具有不同顺序的元素属性的XML文件?我的猜测会是不同的JVM,但如果是这样的话,我怎么能预测它会产生哪个订单?XML打印文件中的不同属性顺序

一些更多细节:我正在使用JAXB XML绑定。

回答

2

有可能是属性被内部保存在某种类型的散列表中,属性名称被用作关键字。哈希表的一个特点是它们不保留顺序。使用许多哈希算法,即使它不可预测,顺序也是一致的,但有时它可能依赖于伪随机因素,例如发现下一块空闲内存的位置。

0

不同的输入。如果它确实是完全相同的Java代码,那么输入可能会有所不同。如果原因是不同的JVM,我会感到惊讶。

我真的需要知道更多给你一个比这更好的答案。

+0

我在另一台机器上复制了相同的程序和相同的输入,并且它转移了一些属性,但它保持一种模式,即在PC1上a = 1 b = 1 c = 1,b = 1 a = 1 c = 1包含它们的所有元素。 – 2011-12-16 22:29:43

4

为什么相同的Java代码会产生具有 不同顺序的元素属性的XML文件?

因为XML spec says表示属性的顺序并不重要。

属性是键值对,用于阐明元素的特征。与元素的顺序不同,它们的顺序对文档结构没有影响。

+0

是的,但是它们的印刷顺序有所不同,对吧?我的经验是,在同一台机器上订单总是一样的。但是在不同的机器上它是不同的。我对这些属性的排列方式不感兴趣,但对如何保持它始终保持一致。 – 2011-12-16 22:32:00

+0

当然,序列化表单有一定的顺序(没有人喜欢重叠的字符;)但是,在XML被解析之后,在序列化之前 - 每当XML被处理为树(DOM,对象等)时,“order “属性之间不存在。所以感知的顺序可以改变。这就像是说“那碗里的苹果以什么顺序排列?”直到您将它们从碗中取出并将它们放在桌子上,才会显示该命令。你也可以选择它们并按任意顺序放回,这是另一种说法,即“实现定义”。 – jasso 2011-12-16 22:56:39