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