首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy XmlSlurper从NodeChildren中获取值

Groovy XmlSlurper从NodeChildren中获取值
EN

Stack Overflow用户
提问于 2015-04-08 00:26:55
回答 1查看 2.2K关注 0票数 2

我正在解析HTML,并试图从一个特定的节点获取完整/不解析的值。

HTML示例:

代码语言:javascript
复制
<html>
    <body>
        <div>Hello <br> World <br> !</div>
        <div><object width="420" height="315"></object></div>
    </body>
</html>

代码:

代码语言:javascript
复制
def tagsoupParser = new org.ccil.cowan.tagsoup.Parser()
def slurper = new XmlSlurper(tagsoupParser)
def htmlParsed = slurper.parseText(stringToParse)

println htmlParsed.body.div[0]

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

代码语言:javascript
复制
Hello <br> World <br> !
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-08 06:53:02

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

Groovy

代码语言:javascript
复制
@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()

给出

代码语言:javascript
复制
<div>Hello <br clear='none'></br> World <br clear='none'></br> !</div>

N.B.,除非我搞错了,泰格汤正在添加结束标记。。如果您真的想要Hello <br> World <br> !,那么您可能需要使用不同的库(可能是regex?)。

我知道它在输出中包括了div元素..。这有问题吗?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29503802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档