Groovy: Node.replaceNode с узлом? - PullRequest
       24

Groovy: Node.replaceNode с узлом?

1 голос
/ 01 сентября 2011

Предположим, у меня есть узел, который я хотел бы заменить на 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 Ответ

2 голосов
/ 01 сентября 2011

Если вы не возражаете против перехода на XmlSlurper (), должно работать следующее:

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

, который заменит все средние узлы содержимым replace.xml

...