gpt4 book ai didi

sorting - 使用 Groovy 对 XML 文件进行排序

转载 作者:行者123 更新时间:2023-12-02 04:09:37 25 4
gpt4 key购买 nike

有没有办法可以使用 Groovy 根据某些属性对 xml 文件进行排序?

这是我的 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,但我似乎不太清楚如何做到这一点。

最佳答案

这是对 @dmahapatro 答案的修改,保留了嵌套节点结构。

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 文档打印到标准输出。

关于sorting - 使用 Groovy 对 XML 文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18150601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com