Java XML Library按顺序保存属性?

时间:2011-09-23 08:10:34

标签: java xml

是否有任何java xml库可以按定义的顺序创建具有属性的xml标记? 我必须创建每个标签有5到20个属性的大型xml文件,我希望订购属性以获得更好的可读性。始终创建的属性应该在开头,然后是公共属性,很少使用的属性应该在最后。

2 个答案:

答案 0 :(得分:3)

这是一种基于jdom创建自定义输出器的简单方法:

JDOM使用XmlOutputter将DOM转换为文本输出。使用以下方法打印属性:

protected void printAttributes(Writer out, List attributes, Element parent,
                                 NamespaceStack namespaces) throws IOException

如您所见,属性通过简单列表传递。 (简单)的想法是子类化这个输出并覆盖方法:

@Override
protected void printAttributes(Writer out, List attributes, Element parent,
                                 NamespaceStack namespaces) throws IOException {
  Collections.sort(attributes, new ByNameCompartor());
  super.printAttributes(out, attribute, parent, namespaces);
}

比较器的实施不应该那么困难。

答案 1 :(得分:1)

我不知道有这样的图书馆。

问题是XML信息模型明确指出标签属性的顺序是无关紧要的。因此,任何保留排序的内存中的XML表示将比必要的更多内存和/或实现次优的属性set / get方法。

我的建议是在XML内容的表示中实现属性的排序;例如在您的XML编辑器中。


我应该指出,我的答案回答了所写的问题 - 关于“保持属性有序”。这可能意味着:

  • 保留插入顺序,或
  • 保留根据某些排序规则排序的属性;例如升序。

从下面的评论中您确实只想按顺序输出属性。这是一个更简单的问题,可以通过自定义序列化DOM的代码来解决。 Andreas_D解释了如何使用JDOM执行此操作,并且可能还有其他选项。

另一点是,如果工具输入中的属性顺序对其行为产生重大影响,则某些事情会有点破裂。因为XML属性的顺序应该是非重要的 ...