我一直在尝试根据xml元素的子getTextContent值对它们进行重新排序,但是我尝试的所有方法都只适用于兄弟节点
基本上,我有这样的XML:
<order>
<item>
<item-id>d54829d52c3f2810VgnVCM1000001af614ac</item-id>
<item-order>3</item-order>
</item>
<item>
<item-id>b54829d52c3f2810VgnVCM1000001af614ac</item-id>
<item-order>1</item-order>
</item>
<item>
<item-id>f54829d52c3f2810VgnVCM1000001af614ac</item-id>
<item-order>2</item-order>
</item>
</order>
我希望通过使用"项目顺序"进行排序来实现以下结果:
<order>
<item>
<item-id>b54829d52c3f2810VgnVCM1000001af614ac</item-id>
<item-order>1</item-order>
</item>
<item>
<item-id>f54829d52c3f2810VgnVCM1000001af614ac</item-id>
<item-order>2</item-order>
</item>
<item>
<item-id>d54829d52c3f2810VgnVCM1000001af614ac</item-id>
<item-order>3</item-order>
</item>
</order>
我一直在尝试一些实现像这个例子基于下面的网站,我发现在互联网上,但它不工作。
http://programmatica.blogspot.com/2006/12/sorting-xml-in-java.htmlHow to sort XML elements by value of attributes in Java?
static class MyComparator4 implements Comparator {
public int compare(Object arg0, Object arg1) {
if (arg0 instanceof Element && arg1 instanceof Element) {
Element e0 = (Element) arg0;
Element e1 = (Element) arg0;
e0.getChildNodes().item(e0.getChildNodes().getLength()-1).getTextContent().compareTo(e1.getChildNodes().item(e1.getChildNodes().getLength()-1).getTextContent());
} else {
return ((Node) arg0).getNodeName().compareTo(
((Node) arg1).getNodeName());
}
}
}
任何帮助都是感激的。先谢谢你
2条答案
按热度按时间dphi5xsq1#
您可以将第二个示例(link)中的类(公共类NodeTools)与Integer类一起使用,这是类似的。
sq1bmfud2#
根据@mazi的建议,我能够实现排序,只需稍微更改NodeTools.sortNodes方法。
基本上,我已经改变了这一部分:
对此:
下面是完整的代码:
下面是输出: