Groovy XMLSlurper 如何在现有元素之后追加子元素?

Groovy XMLSlurper how to append a child element after an existing element?

我正在使用 XMLSlurper 解析 Groovy 中的 XML。

应将一个元素添加到已解析的 XML(GPathResult 实例)中,但新元素应位于现有元素之后的特定位置,以符合 XML 架构.

现在唯一可行的是在解析的 XML 末尾附加新节点,这违反了 XSD.

有没有办法在现有元素之后追加新元素?类似于 "appendSibling()"?

结构是这样的:

<root>
  <name>xxx</name>
  <state>xxx</state>
</root>

我需要 "id" 在 "name" 之后和 "root" 之下:

<root>
  <name>xxx</name>
  <id>xxx</id>
  <state>xxx</state>
</root>

使用 replaceNode 找到了一个简单的解决方案,几乎是一个衬里。这会在被示例节点 + 新节点覆盖的现有节点之后添加 require 节点。唯一的问题是恢复新节点不起作用,因为 XmlSlurper 很懒惰!

import groovy.util.XmlSlurper

def xml = new XmlSlurper().parseText('''
<root>
  <name>xxx</name>
  <state>xxx</state>
</root>
''')

xml.name.replaceNode { node ->
   mkp.yield(node)
   id('xxxx')
}

println xml.children()*.name() // new id node doesn't get printted because it was not evaluated (XmlSlurper is lazy!)

groovy.xml.XmlUtil.serialize( xml )