删除xml标签之间的文本并仍然保留标签

时间:2020-01-13 23:38:11

标签: xml groovy

我正在尝试使用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>")

这可以完成工作,但是我想知道是否有一种更干净的方法来仅删除文本并保留标签?

2 个答案:

答案 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>"