Groovy XmlSlurper 从 NodeChildren 获取价值
Groovy XmlSlurper get value out of NodeChildren
我正在解析 HTML 并尝试从一个特定节点中获取完整/未解析的值。
HTML 示例:
<html>
<body>
<div>Hello <br> World <br> !</div>
<div><object width="420" height="315"></object></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 仅在第一个节点的情况下显示文本,而我在第二个节点上得到空字符串。问题:如何检索第一个节点的值,以便得到:
Hello <br> World <br> !
这是我用来从第一个 div
标签中获取内容的方法(省略 xml 声明和命名空间)。
Groovy
@Grab('org.ccil.cowan.tagsoup:tagsoup:1.2.1')
import org.ccil.cowan.tagsoup.Parser
import groovy.xml.*
def html = """<html>
<body>
<div>Hello <br> World <br> !</div>
<div><object width="420" height="315"></object></div>
</body>
</html>"""
def parser = new Parser()
parser.setFeature('http://xml.org/sax/features/namespaces',false)
def root = new XmlSlurper(parser).parseText(html)
println new StreamingMarkupBuilder().bindNode(root.body.div[0]).toString()
给予
<div>Hello <br clear='none'></br> World <br clear='none'></br> !</div>
N.B. 除非我记错了,Tagsoup is adding the closing tags。如果你真的想要 Hello <br> World <br> !
,你可能必须使用不同的库(也许是正则表达式?)。
我知道它在输出中包含 div
元素...这是个问题吗?
我正在解析 HTML 并尝试从一个特定节点中获取完整/未解析的值。
HTML 示例:
<html>
<body>
<div>Hello <br> World <br> !</div>
<div><object width="420" height="315"></object></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 仅在第一个节点的情况下显示文本,而我在第二个节点上得到空字符串。问题:如何检索第一个节点的值,以便得到:
Hello <br> World <br> !
这是我用来从第一个 div
标签中获取内容的方法(省略 xml 声明和命名空间)。
Groovy
@Grab('org.ccil.cowan.tagsoup:tagsoup:1.2.1')
import org.ccil.cowan.tagsoup.Parser
import groovy.xml.*
def html = """<html>
<body>
<div>Hello <br> World <br> !</div>
<div><object width="420" height="315"></object></div>
</body>
</html>"""
def parser = new Parser()
parser.setFeature('http://xml.org/sax/features/namespaces',false)
def root = new XmlSlurper(parser).parseText(html)
println new StreamingMarkupBuilder().bindNode(root.body.div[0]).toString()
给予
<div>Hello <br clear='none'></br> World <br clear='none'></br> !</div>
N.B. 除非我记错了,Tagsoup is adding the closing tags。如果你真的想要 Hello <br> World <br> !
,你可能必须使用不同的库(也许是正则表达式?)。
我知道它在输出中包含 div
元素...这是个问题吗?