Groovy - 排序XML元素

时间:2016-04-20 06:32:00

标签: xml groovy

我的目标是按字母顺序对XML元素进行排序。我在这里找到了解决方案:Sort elements of arbitrary XML document recursively

部分:

def x = '''<foo b="b" a="a" c="c">
<qwer>
<!-- A comment -->
<zxcv c="c" b="b">Some Text</zxcv>
<vcxz c="c" b="b"/>
</qwer>
<baz e="e" d="d">Woo</baz>
<bar>
<fdsa g="g" f="f"/>
<asdf g="g" f="f"/>
</bar>
</foo>'''

def order( node ) {
[ *:node.attributes() ].sort().with { attr ->
    node.attributes().clear()
    attr.each { node.attributes() << it }
}
node.children().sort()
               .grep( Node )
               .each { order( it ) }
node
}

def doc = new XmlParser().parseText( x )

println groovy.xml.XmlUtil.serialize( order( doc ) )

在Groovy Web控制台中,它始终以不同的顺序返回XML节点,而不是按字母顺序返回。我不能使用XSLT转换,这可能适用于任何XML文档

修改代码有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

属性存储为HashMap,因此没有订单

他们没有XML格式的订单

所以我认为你不能对它们进行排序

答案 1 :(得分:0)

您可以通过将元素放在列表中来对其进行排序

List items = []
rss.channel.item.each {
   items << it
}

items.sort {a,b -> a.title.text()) <=> b.title.text())}

这将为您提供按标题排序的元素