groovy / XML:用另一个节点替换节点

时间:2015-06-17 06:40:05

标签: xml groovy xml-parsing xmlslurper

我尝试使用XmlSlurper(或XmlParser)替换另一个XML节点。

原始XML:

<myXml>
  ...
  <myNode>
    <Name>name1</Name>
    <Name>name2</Name>
    <Name>name3</Name>
 </myNode>
 ...
</myXml>

包含构建新节点的项目的列表

def namelist = ['name4','name5','name6','name7']

我想拥有什么

<myXml>
  ...
  <myNode>
    <Name>name4</Name>
    <Name>name5</Name>
    <Name>name6</Name>
    <Name>name7</Name>
 </myNode>
 ...
</myXml>

要删除我尝试过的节点,但该节点仍然存在:

def myXml = new XmlSlurper().parseText(xml)
myXml.myNode[0].replaceNode {}

然后我找不到使用列表创建新节点的解决方案。

1 个答案:

答案 0 :(得分:1)

你走了:

import groovy.xml.*

def xml = '''<myXml>
  <myNode>
    <Name>name1</Name>
    <Name>name2</Name>
    <Name>name3</Name>
 </myNode>
</myXml>'''
def namelist = ['name4','name5','name6','name7']
def slurped = new XmlSlurper().parseText(xml)

slurped.myNode.replaceNode {
 myNode {
    namelist.collect { n ->
      Name "$n"
    }
 }
}

new StreamingMarkupBuilder().bind {
    mkp.yield slurped
}.toString()

该节点实际上已被替换,但您需要序列化XML才能看到它。