Удалить текст между тегами xml и сохранить теги - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь удалить текст между тегами xml, сохраняя теги, используя Groovy. Самый близкий ответ, который мне удалось найти, был здесь:

Удаление всех символов между двумя указанными c тегами (java regex)

Но это удаляет теги, а также. В качестве обходного пути можно использовать:

    String content = "<DATE> html content </DATE>"
    content = content.replaceAll("(?s)<DATE>.*?</DATE>", "<DATE></DATE>")

Это выполнит работу, но я хочу знать, есть ли более чистый способ удаления только текста и сохранения тегов?

Ответы [ 2 ]

1 голос
/ 14 января 2020

Другой метод, это go через каждый узел в дереве, и установить его значение как просто дочерние узлы (которые будут удалять строки) ... вот так:

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>
0 голосов
/ 14 января 2020

Если предположить, что структура вашего xml всегда одинакова, то

content = new XmlParser().parseText("<DATE> html content </DATE>")
content.setValue("")
return XmlUtil.serialize(content)

Но, честно говоря, если имя тега никогда не меняется, почему бы просто не вернуть постоянную строку?

content = "<DATE></DATE>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...