Groovy XmlSlurper получить значение узла без детей

Я анализирую HTML и пытаюсь оценить сам родительский узел, без значений дочерних узлов.

Пример HTML:

<html>
    <body>
        <div>
             <a href="http://intro.com">extra stuff</a>
             Text I would like to get.
             <a href="http://example.com">link to example</a>
        </div>
    </body>
</html>

Код:

def tagsoupParser = new org.ccil.cowan.tagsoup.Parser()
def slurper = new XmlSlurper(tagsoupParser)
def htmlParsed = slurper.parseText(stringToParse)

println htmlParsed.body.div[0]

Однако приведенный выше код возвращает:

дополнительный материал Текст, который я хотел бы получить. ссылка на пример

Как я могу получить только значение родительского узла без детей? Пример:

Текст, который я хотел бы получить.

PS: я пытался удалить лишние элементы с помощью подстроки, но это оказалось ненадежным.

2 ответа

Решение

Если вы переключитесь на использование XmlParser вместо XmlSlurper, ты можешь сделать:

println htmlParsed.body.div[0].localText()[0]

Предполагая, что вы находитесь на Groovy 2.3+

Нет необходимости переключаться на XmlParser, просто разыграйте первый divв качестве NodeChild:

      def html = new XmlSlurper().parseText(xml)
def text = (html.body.div.first() as NodeChild).localText().first()
      // Using @CompileStatic:
GPathResult html = new XmlSlurper().parseText(xml)
GPathResult div = html["body"]["div"]
String text = (div.first() as NodeChild).localText().first()
Другие вопросы по тегам