Groovy:使用GPathResult.appendNode(节点)合并两个XML文件不起作用

Groovy:使用GPathResult.appendNode(节点)合并两个XML文件不起作用,xml,groovy,xmlslurper,Xml,Groovy,Xmlslurper,我需要编写一个脚本,它接收几个XML文件,并根据它们的内容执行一些操作。为了更方便地遍历所有元素,我希望将所有文件合并到一个XML树中(仅在内存中)。我尝试过使用appendNode()方法,但遇到了非常奇怪的行为。下面是我用来说明问题的代码片段: def slurper=new-XmlSlurper() def a=slurper.parseText(“”) def b=slurper.parseText(“foo”) a、 附件节点(b) println XmlUtil.serialize(

我需要编写一个脚本,它接收几个XML文件,并根据它们的内容执行一些操作。为了更方便地遍历所有元素,我希望将所有文件合并到一个XML树中(仅在内存中)。我尝试过使用
appendNode()
方法,但遇到了非常奇怪的行为。下面是我用来说明问题的代码片段:

def slurper=new-XmlSlurper()
def a=slurper.parseText(“”)
def b=slurper.parseText(“foo”)
a、 附件节点(b)
println XmlUtil.serialize(a)
a、 “**”.each{println(it.name())}
它输出:

<?xml version="1.0" encoding="UTF-8"?><a>
  <b>foo</b>
</a>

a
输出如下所示:

<?xml version="1.0" encoding="UTF-8"?><a>
  <b>foo</b>
</a>

a
b

福
A.
B
正如我所期望的那样

我错过了什么?为什么解析和序列化再次改变了输出?我是Groovy新手,所以我想这可能是显而易见的,请帮助我理解为什么会发生。或者有更好的方法合并XML文件?

之所以会这样,是因为返回的是:

用于表示惰性计算的GPath表达式的基类

根据:

XmlSlurper
惰性地评估结构。因此,如果更新xml,则必须再次计算整个树

这就是为什么必须使用

a=slurper.parseText(XmlUtil.serialize(a))
让你的表情正常工作

另一方面,如果您使用,则无需重新评估XML树即可使其正常工作

import groovy.xml.XmlUtil
XmlParser root=新的XmlParser()
def a=root.parseText(“”)
def b=root.parseText(“foo”)
a、 附加(b)
println XmlUtil.serialize(a)
a、 “**”.each{println(it.name())}
输出

福
A.
B

如何获得迭代器?忘记添加最后一行,抱歉,它已经在那里了