我正在编写一个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)处理文档: DOM处理后XML属性的顺序
但是,这不适用于我的情况,因为我需要在一个节点中进行的转换可能取决于整个文档的XPATH表达式。因此,最简单的方法是拥有一个与标准Java DOM库非常相似的xml库,不同之处在于它保留了属性的顺序。
有没有这样的图书馆?
ps:请避免讨论我是否应该保留属性顺序。这是一个非常有趣的讨论,但这不是这个问题的重点。
您可能还想尝试DecentXML,因为它可以保留属性顺序,注释甚至标识。如果您需要以编程方式更新也应该可以人工编辑的XML文件,则非常好。我们将其用于我们的一种配置工具。