删除xml标记之间的文本并保留标记

删除xml标记之间的文本并保留标记,xml,groovy,Xml,Groovy,我正在尝试使用Groovy删除xml标记之间的文本,同时仍然保留标记。我能找到的最接近的答案是: 但这也移除了标签。解决方法是使用: String content = "<DATE> html content </DATE>" content = content.replaceAll("(?s)<DATE>.*?</DATE>", "<DATE></DATE>") String content=“html

我正在尝试使用Groovy删除xml标记之间的文本,同时仍然保留标记。我能找到的最接近的答案是:

但这也移除了标签。解决方法是使用:

    String content = "<DATE> html content </DATE>"
    content = content.replaceAll("(?s)<DATE>.*?</DATE>", "<DATE></DATE>")
String content=“html内容”
content=content.replaceAll(“(?s)。*?”,“”)

这就完成了工作,但我想知道是否有更干净的方法只删除文本并保留标记?

如果假定xml的结构始终相同,那么

content = new XmlParser().parseText("<DATE> html content </DATE>")
content.setValue("")
return XmlUtil.serialize(content)
content=newXMLParser().parseText(“html内容”)
content.setValue(“”)
返回XmlUtil.serialize(内容)
但坦率地说,如果标记名从未更改,为什么不直接返回常量字符串呢

content = "<DATE></DATE>"
content=“”

另一种方法,它需要遍历树中的每个节点,并将其值设置为仅为子节点(这将删除字符串)。。。像这样:

def x = '''
  <root>
    <a>I'm text</a>
    <b>
      So am I
      <c woo="yay">And me!</c>
      last one
    </b>
    Some more text
  </root>'''

import groovy.xml.*

def xml = new XmlParser().parseText(x)

xml.'**'.each { node ->
    if (node instanceof Node) {
        node.value = node.children().findAll { it instanceof Node }
    }
}

println XmlUtil.serialize(xml)
def x=''
我在发短信
我也是
还有我!
最后一个
更多的文字
'''
导入groovy.xml*
def xml=new XmlParser().parseText(x)
xml。“**”。每个{node->
if(节点的节点实例){
node.value=node.children().findAll{it instanceof node}
}
}
println XmlUtil.serialize(xml)
其输出将为:

<?xml version="1.0" encoding="UTF-8"?><root>
  <a/>
  <b>
    <c woo="yay"/>
  </b>
</root>