问题
For example, how can I remove all tags with name one
in rootNode
programmatically?
def rootNode = new XmlSlurper().parseText(
'<root><one a1="uno!"/><two>Some text!</two></root>' )
I tried
rootNode.children().removeAll{ it.name() == 'one' }
but it reported:
groovy.lang.MissingMethodException: No signature of method: groovy.util.slurpersupport.NodeChildren.removeAll() is applicable for argument types: (DUMMY$_closure1_closure2) values: [DUMMY$_closure1_closure2@6c5f92d3]
回答1:
Try
rootNode.one.replaceNode { }
To complete the answer:
def rootNode = new XmlSlurper().parseText (
'<root><one a1="uno!"/><two>Some text!</two></root>'
)
rootNode.one.replaceNode { }
println groovy.xml.XmlUtil.serialize( rootNode )
回答2:
Find the node and replace it:
import groovy.xml.XmlUtil
def rootNode = new XmlSlurper().parseText(
'<root><one a1="uno!"/><two>Some text!</two></root>' )
rootNode.children().findAll { it.name() == 'one' }.replaceNode {}
println XmlUtil.serialize(rootNode)
Output:
<?xml version="1.0" encoding="UTF-8"?><root>
<two>Some text!</two>
</root>
回答3:
import groovy.xml.*
String xml = '<root><one a1="uno!"/><two>Some text!</two></root>'
def root = new XmlSlurper().parseText(xml)
root.one.replaceNode{}
def newRoot = new StreamingMarkupBuilder().bind {
mkp.yield root
}.toString()
println xml
println newRoot
Output:
<root><one a1="uno!"/><two>Some text!</two></root>
<root><two>Some text!</two></root>
来源:https://stackoverflow.com/questions/33863015/how-to-remove-an-element-in-groovy-using-xmlslurper