How to remove an element in Groovy using XmlSlurper?

倾然丶 夕夏残阳落幕 提交于 2019-12-18 06:51:11

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!