Groovy:Node.replaceNode与Node?

Groovy:Node.replaceNode与Node?,groovy,xml-parsing,Groovy,Xml Parsing,假设我有一个节点要替换为replaceNode,但是,我不想使用Builder,或者更确切地说,我已经有了要替换它的节点: replacement = new XmlParser.parse('input.xml') root.depthFirst().replaceme.each { it -> it.replaceNode { node -> // This is what I can't figure out } } 我尝试了很多不同的迭代,但似乎无法解决。如

假设我有一个节点要替换为
replaceNode
,但是,我不想使用
Builder
,或者更确切地说,我已经有了要替换它的节点:

replacement = new XmlParser.parse('input.xml')
root.depthFirst().replaceme.each { it ->
  it.replaceNode { node ->
    // This is what I can't figure out
  }
}
我尝试了很多不同的迭代,但似乎无法解决。如果我只返回该段中的文本,它将用空节点替换节点

例如,如果我的输入文件是: 这个应该换掉

我有一个这样的替代品: 这将取代原来的

我想做一些类似的事情:

top = new XmlParser().parseFile('input.xml')
top.middle.each { it ->
  it.replaceNode { node ->
    new XmlParser().parseFile('replacement.xml')
  }
}

如果您不介意切换到XmlSlurper(),以下操作应该可以:

def top = new XmlSlurper().parse('input.xml')
top.middle.each { node ->
    node.replaceNode {
        mkp.yield(new XmlSlurper().parse('replacement.xml')) 
    }   
}

它将用replacement.xml的内容替换所有中间节点。这就成功了。需要更多的欺骗,因为我正在使用名称空间,奇怪的是,findAll没有使用它们,尽管我声明了它们-不得不使用it.name()和it.namespaceURI进行比较,但都成功了。