如何从XML文件中删除节点

时间:2014-10-03 08:46:02

标签: xml groovy xmlslurper

我想使用groovy从XML文件中删除一些元素,但这似乎不起作用。

任何想法如何解决这个问题?

def DeploymentDescriptors = new XmlSlurper().parse("pathToMyXMLFile")
DeploymentDescriptors.NameValuePairs.NameValuePair.each {
if(it.name == 'B')
   it.replaceNode{}
}

XML文件

<DeploymentDescriptors>
    <NameValuePairs>
        <NameValuePair>
            <name>A</name>
            <value>Value A</value>
        </NameValuePair>
        <NameValuePair>
            <name>B</name>
            <value>Value B</value>
        </NameValuePair>
        <NameValuePair>
            <name>C</name>
            <value>Value C</value>
        </NameValuePair>
    </NameValuePairs>
</DeploymentDescriptors>

1 个答案:

答案 0 :(得分:2)

XmlSlurper在需要之前不会更改已处理的XML。如果你序列化它你会看到效果。

以下是工作示例:

import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil
def xml = """
<DeploymentDescriptors>
    <NameValuePairs>
        <NameValuePair>
            <name>A</name>
            <value>Value A</value>
        </NameValuePair>
        <NameValuePair>
            <name>B</name>
            <value>Value B</value>
        </NameValuePair>
        <NameValuePair>
            <name>C</name>
            <value>Value C</value>
        </NameValuePair>
    </NameValuePairs>
</DeploymentDescriptors>"""

def parsed = new XmlSlurper().parseText(xml)
parsed.NameValuePairs.NameValuePair.findAll { it.name.text() == 'B' }*.replaceNode{}
println XmlUtil.serialize(new StreamingMarkupBuilder().bind {
  mkp.yield parsed
} )