我正在尝试使用Groovy在xml标记之间删除文本,同时仍保留标记。我能找到的最接近的答案是在这里:
Removing all the characters between two specific tags (java regex)
但这也会删除标签。一种解决方法是使用:
String content = "<DATE> html content </DATE>"
content = content.replaceAll("(?s)<DATE>.*?</DATE>", "<DATE></DATE>")
这可以完成工作,但是我想知道是否有一种更干净的方法来仅删除文本并保留标签?
答案 0 :(得分:1)
另一种方法,它遍历树中的每个节点,并将其值设置为只是子节点(这将删除字符串)...就像这样:
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)
其输出将是:
<?xml version="1.0" encoding="UTF-8"?><root>
<a/>
<b>
<c woo="yay"/>
</b>
</root>
答案 1 :(得分:0)
如果假设您的xml结构始终相同,那么
content = new XmlParser().parseText("<DATE> html content </DATE>")
content.setValue("")
return XmlUtil.serialize(content)
但是坦率地说,如果标记名永不改变,为什么不返回常量字符串呢?
content = "<DATE></DATE>"