Groovy:带节点的Node.replaceNode?

时间:2011-09-01 00:40:35

标签: 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
  }
}

我尝试了很多不同的迭代,但似乎无法解决这个问题。如果我只返回该段中的文本,它将用空节点替换该节点。

例如,如果我的输入文件是这样的:            这应该被取代     

我有这样的替代品:     这将取代原始

我想做点什么:

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

1 个答案:

答案 0 :(得分:2)

如果您不介意切换到XmlSlurper(),则以下内容应该有效:

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

将使用replacement.xml的内容替换所有中间节点