Groovy:使用GPathResult.appendNode(节点)合并两个XML文件不起作用
我需要编写一个脚本,它接收几个XML文件,并根据它们的内容执行一些操作。为了更方便地遍历所有元素,我希望将所有文件合并到一个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(
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
如何获得迭代器?忘记添加最后一行,抱歉,它已经在那里了