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进行比较,但都成功了。