gpt4 book ai didi

保留属性顺序的 Java XML 库

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:29 25 4
gpt4 key购买 nike

我正在编写一个 Java 程序来读取 XML 文件,进行一些修改,然后写回 XML。

使用标准的 Java XML DOM API,不保留属性的顺序。

也就是说,如果我有一个输入文件,例如:

<person first_name="john" last_name="lederrey"/>

我可能会得到一个输出文件:

<person last_name="lederrey" first_name="john"/>

这是正确的,因为 XML 规范说 order 属性并不重要。

但是,我的程序需要保留属性的顺序,以便人们可以轻松地使用 diff 工具比较输入和输出文档。

一个解决方案是使用 SAX(而不是 DOM)处理文档: Order of XML attributes after DOM processing

但是,这对我的情况不起作用,因为我需要在一个节点中进行的转换可能取决于 XPath整篇文档的表达方式。

因此,最简单的事情就是拥有一个与标准 Java DOM 库非常相似的 XML 库,但它保留了属性顺序。

有这样的图书馆吗?

PS:请避免讨论我是否应该保留属性顺序。这是一个非常有趣的讨论,但这不是这个问题的重点。

最佳答案

Saxon这些天提供了一个序列化选项[1] 来控制属性输出的顺序。它不保留输入顺序(因为 Saxon 不知道输入顺序),但它确实允许您进行控制,例如,ID 属性始终先出现。

如果要手动编辑 XML,这将非常有用;属性以“错误”顺序出现的 XML 可能会使人类读者或编辑者非常迷惑。

如果您将此用作差异过程的一部分,那么您可能希望在比较它们之前将两个文件都经过一个标准化属性顺序的过程。但是,为了比较文件,我首选的方法是同时解析它们并使用 XPath deep-equal() 函数;或者使用像 DeltaXML 这样的专门工具。

[1] saxon:attribute-order - 参见 http://www.saxonica.com/documentation/index.html#!extensions/output-extras/serialization-parameters

关于保留属性顺序的 Java XML 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17725948/

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