Analisando HTML com Cyberneko para encontrar um 'div'-tag
Pergunta
Preciso de um 'div'-tag específico (identificado por' ID ') de um site HTML. Para analisar a página, estou usando o Cyberneko.
def doc = new XmlParser( new org.cyberneko.html.parsers.SAXParser() ).parse(htmlFile)
divTag = doc.depthFirst().DIV.find{ it['@id'] == tagId }
Até agora, não há problema, mas no final não preciso de XML, mas o conteúdo original de toda a tag 'div'. Infelizmente, não consigo descobrir como fazer isso ...
Solução
Editar: Respondendo ao primeiro comentário.
Isso funciona:
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}
Parece que o Cyberneko retornará um documento HTML bem formado, independentemente de a marcação original ser. ou seja, a raiz do documento será um elemento HTML e também haverá um elemento principal. Organizado.
Outras dicas
Este é um teste simples baseado na resposta de Noah - infelizmente, ainda não funciona :(
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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow