Groovy XmlSlurper 获取无子节点的值

Groovy XmlSlurper get value of the node without children

我正在解析 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]

但是上面的代码returns:

extra stuff Text I would like to get. link to example

如何只获取父节点值而没有子节点?示例:

Text I would like to get.

P.S: 我尝试通过执行 substring 来删除多余的元素,但它被证明是不可靠的。

如果您改用 XmlParser 而不是 XmlSlurper,您可以:

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

假设你是 on 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()