我需要一个来自html网站的特定'div'标签(由'id'标识)。解析页面 我正在使用cyberneko。
def doc = new XmlParser( new org.cyberneko.html.parsers.SAXParser() ).parse(htmlFile)
divTag = doc.depthFirst().DIV.find{ it['@id'] == tagId }
到目前为止没问题,但最后我不需要XML,而是整个'div'标签的原始内容。不幸的是,我无法弄清楚如何做到这一点......
答案 0 :(得分:1)
编辑:回应第一条评论。
这有效:
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的root将是一个HTML元素,并且还会有一个HEAD元素。整齐。
答案 1 :(得分:0)
这是一个基于诺亚答案的简单测试 - 不幸的是它还没有(还)起作用:(
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