解析HTML与cyberneko找到一个“div'标签
题
我需要一个特定的“div'标签(通过标识‘ID’)从一个HTML网站。为了解析页面 我使用cyberneko。
def doc = new XmlParser( new org.cyberneko.html.parsers.SAXParser() ).parse(htmlFile)
divTag = doc.depthFirst().DIV.find{ it['@id'] == tagId }
到目前为止,没有问题,但最后我不需要XML,但整个“DIV”标签的原创内容。不幸的是我无法弄清楚如何做到这一点...
解决方案
编辑:响应第一评论
这个作品:
def html = """
<body>
<div id="breadcrumbs">
<b>
crumb1
</b>
</div>
</body>
"""
def doc = new XmlSlurper(new org.cyberneko.html.parsers.SAXParser()).parseText(html)
divTag = doc.BODY.DIV.find { it.@id == 'breadcrumbs' }
println "" << new groovy.xml.StreamingMarkupBuilder().bind {xml -> xml.mkp.yield divTag}
它看起来像cyberneko将返回一个良好形成的HTML文档,无论原始标记是否。即,DOC的根将是一个HTML元素,也将有磁头元件。整齐。
其他提示
这是一个简单的测试基于诺亚回答 - 不幸的是它没有(还)工作:(
def html = """
<body>
<div id="breadcrumbs">
<b>
crumb1
</b>
</div>
</body>
"""
def doc = new XmlSlurper( new org.cyberneko.html.parsers.SAXParser() ).parseText(html)
println "document: $doc"
def htmlTag = doc.DIV.find {
println "-> $it"
it['@id'] == "breadcrumbs"
}
println htmlTag
assert htmlTag
不隶属于 StackOverflow