我想使用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>
答案 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
} )