Groovy XmlSlurper 从 NodeChildren 中获取价值

MeI*_*eIr 2 groovy xmlslurper html-parsing nodechildren

我正在解析 HTML 并尝试从一个特定节点中获取完整/未解析的值。

HTML 示例:

<html>
    <body>
        <div>Hello <br> World <br> !</div>
        <div><object width="420" height="315"></object></div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

代码:

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

println htmlParsed.body.div[0]
Run Code Online (Sandbox Code Playgroud)

但是,它仅在第一个节点的情况下返回文本,而第二个节点则为空字符串。问题:如何检索第一个节点的值,以便获得:

Hello <br> World <br> !
Run Code Online (Sandbox Code Playgroud)

Nic*_*aly 5

这是我用来从第一个div标签中获取内容的方法(省略 xml 声明和命名空间)。

常规

@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()
Run Code Online (Sandbox Code Playgroud)

<div>Hello <br clear='none'></br> World <br clear='none'></br> !</div>
Run Code Online (Sandbox Code Playgroud)

注意除非我弄错了,Tagsoup正在添加结束标签。如果你真的想要Hello <br> World <br> !,你可能不得不使用不同的库(也许是正则表达式?)。

我知道它div在输出中包含元素......这是一个问题吗?