使用 Groovy 对 xml 进行排序

问题描述 投票:0回答:1

我的问题与 Sean Reilly 对以下问题的回答相关: 使用 Groovy 对 XML 文件进行排序

当我更换那里时

rootNode.children().sort(true) {it.attribute('name')}

rootNode.Person.sort(true) {it.attribute('name')}

Person 节点不再按名称属性排序。这是为什么?当我将

rootNode.children()
rootNode.Person
进行比较时,返回 true 。我正在使用 Groovy 版本 2.4.21。

我希望在这两种情况下 Person 节点都已排序。

groovy
1个回答
0
投票

您需要执行以下操作之一

  1. 删除所有人员标签,然后将其添加回来:
rootNode.children().findAll { it.name() == "Person" }.replaceNode {}

rootNode.Person.sort(true) {it.attribute('name')}.each { n -> rootNode.appendNode( n )
}
  1. 一次性对所有孩子进行排序:
rootNode.children().sort(true) { a,b -> 
   a.name() == 'Person' && a.name() == b.name() ? [email protected](b.@name) : (a.name() == 'Person' ? 1 : -1) 
}

有点混乱,但本质上是将所有 Person 节点排序在所有其他节点之前,如果两者都是 Person 节点,则比较它们的 @name 属性。

© www.soinside.com 2019 - 2024. All rights reserved.