Groovy XmlSlurper 从 NodeChildren 中获取值(value)

标签 groovy html-parsing xmlslurper 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]

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

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>

注意除非我弄错了,Tagsoup is adding the closing tags 。如果你确实想要 Hello <br> World <br> ! ,您可能必须使用不同的库(也许是正则表达式?)。

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

关于Groovy XmlSlurper 从 NodeChildren 中获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29503802/

相关文章:

Python网页爬取BeautifulSoup : getting both text and links

groovy - XmlSlurper: 获取原文件中groovy.util.slurpersupport.NodeChild的行号

groovy - 解析 xml 的问题

parsing - Groovy - 方法的不明确方法重载

sql - Groovy Sql 分页行为

php - 使用 XPath 和 PHP 解析 HTML

grails - 没有命名空间的Groovy XMLSlurper命名空间错误

groovy - 将 GString 存储在变量中并在运行时求值

groovy - 在 Groovy 中对 Map 的值进行排序

java - 如何从网页中提取绝对URL?