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()