Análisis de HTML con cyberneko para encontrar un 'div'-tag
Pregunta
necesito uno 'div'-tag (identificado por 'id') específico de un sitio html. Para analizar la página Estoy usando cyberneko.
def doc = new XmlParser( new org.cyberneko.html.parsers.SAXParser() ).parse(htmlFile)
divTag = doc.depthFirst().DIV.find{ it['@id'] == tagId }
Hasta el momento no hay problema, pero al final no necesito XML, pero el contenido original de la etiqueta entera 'div'. Por desgracia no puedo encontrar la manera de hacer esto ...
Solución
EDIT:. En respuesta a la primer comentario
Estos trabajos:
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 cyberneko devolverá un documento HTML bien formado, con independencia de que el marcado original. es decir, la raíz del documento será un elemento HTML, y también habrá un elemento HEAD. Aseado.
Otros consejos
Esta es una prueba sencilla basada en la respuesta de Noah - por desgracia no lo tienen (aún) de trabajo: (
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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow