使用Groovy对XML文件进行排序 [英] Use Groovy to Sort XML File
本文介绍了使用Groovy对XML文件进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有一种方法可以使用Groovy对某些属性进行xml文件排序?
Is there a way I can sort an xml file base on certain attributes with Groovy?
这是我的xml
<List>
<Person name="fff"/>
<Person name="ggg">
<PhoneNum>
<AreaCode>555</AreaCode>
<Number>1234567</Number>
</PhoneNum>
</Person>
<Person name="eee"/>
<Person name="ccc"/>
<Person name="jjj"/>
<Person name="ddd">
<PhoneNum>
<AreaCode>555</AreaCode>
<Number>7654321</Number>
</PhoneNum>
</Person>
<Person name="aaa"/>
<Person name="bbb"/>
<Person name="ttt"/>
</List>
我希望输出为
<List>
<Person name="aaa"/>
<Person name="bbb"/>
<Person name="ccc"/>
<Person name="ddd">
<PhoneNum>
<AreaCode>555</AreaCode>
<Number>7654321</Number>
</PhoneNum>
</Person>
<Person name="eee"/>
<Person name="fff"/>
<Person name="ggg">
<PhoneNum>
<AreaCode>555</AreaCode>
<Number>1234567</Number>
</PhoneNum>
</Person>
<Person name="jjj"/>
<Person name="ttt"/>
</List>
我已经研究过XMLSlurper,但是我似乎还不太清楚如何做到这一点.
I've looked into XMLSlurper but I can't quite seem to figure out how to do this.
推荐答案
这是对@dmahapatro答案的修改,保留了嵌套的节点结构.
Here's a modification to @dmahapatro's answer that preserves the nested node structure.
import groovy.xml.MarkupBuilder
String xml = '''
<List>
<Person name="fff"/>
<Person name="ggg">
<PhoneNum>
<AreaCode>555</AreaCode>
<Number>1234567</Number>
</PhoneNum>
</Person>
<Person name="eee"/>
<Person name="ccc"/>
<Person name="jjj"/>
<Person name="ddd">
<PhoneNum>
<AreaCode>555</AreaCode>
<Number>7654321</Number>
</PhoneNum>
</Person>
<Person name="aaa"/>
<Person name="bbb"/>
<Person name="ttt"/>
</List>
'''
def rootNode = new XmlParser().parseText(xml)
rootNode.children().sort(true) {it.attribute('name')}
new XmlNodePrinter().print(rootNode)
这是怎么回事:
- 使用
XmlParser
而不是XmlSlurper
生成可以使用XmlNodePrinter
打印的节点. - 使用
sort {it.attribute('name')}
按名称对节点的子级进行排序 - 用于排序的
true
属性会使基础列表发生突变,从而对子节点进行重新排序. -
XmlNodePrinter
将重新排序的xml文档打印到标准输出中.
- Using
XmlParser
instead ofXmlSlurper
generates nodes that can be printed usingXmlNodePrinter
. - The children of the node are sorted by name using
sort {it.attribute('name')}
- The
true
attribute to sort mutates the underlying list, which reorders the child nodes. - The
XmlNodePrinter
prints the re-sorted xml document to standard out.
这篇关于使用Groovy对XML文件进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文