You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy 2.4.21中rootNode.Person排序失效问题咨询

问题解析:Groovy XML排序中rootNode.children().sort()与rootNode.Person.sort()的差异

结合Sean Reilly针对XML排序的解决方案,核心差异源于Groovy XML集合的类型特性:

关键原因

在Groovy 2.4.21中,rootNode.children()和rootNode.Person虽然内容相等,但它们与原XML结构的绑定逻辑完全不同:

  • rootNode.children()返回的是根节点的直接子节点集合,这个集合与原XML节点的子节点列表强绑定。调用sort(true)(参数true表示修改原集合)时,会直接调整根节点下子节点的实际顺序,最终同步到XML结构中,这也是Sean Reilly方案有效的核心原因。
  • rootNode.Person返回的是XMLNodeList类型的视图集合——它只是从原XML中筛选出所有<Person>节点,但并不直接关联根节点的子节点顺序。调用sort(true)只会对这个视图内部的元素排序,不会修改原XML中根节点下的子节点排列,所以你看不到XML里的Person节点被排序。

实现期望效果的方法

如果想通过rootNode.Person实现排序,需要手动将排序后的节点替换根节点的子节点:

// 先获取排序后的Person节点列表
def sortedPersons = rootNode.Person.sort { it.attribute('name') }
// 清空根节点原有子节点,再添加排序后的节点
rootNode.children().clear()
rootNode.children().addAll(sortedPersons)

这样就能达到和rootNode.children().sort(true)一致的排序效果。

内容的提问来源于stack exchange,提问作者jimmy_blue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:55:00