Parsing del codice HTML con cyberneko di trovare un 'div'-tag
Domanda
ho bisogno di uno specifico 'div'-tag (identificato da 'id') da un sito HTML. Per analizzare pagina Sto utilizzando cyberneko.
def doc = new XmlParser( new org.cyberneko.html.parsers.SAXParser() ).parse(htmlFile)
divTag = doc.depthFirst().DIV.find{ it['@id'] == tagId }
Finora nessun problema, ma alla fine non ho bisogno di XML, ma il contenuto originale di tutta la tag 'div'. Purtroppo io non riesco a capire come fare questo ...
Soluzione
EDIT: In risposta a primo commento
.Questo funziona:
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}
Sembra che cyberneko restituirà un documento HTML ben formato, indipendentemente dal fatto che la marcatura originale era. cioè, radice di Doc sarà un elemento HTML, e ci sarà anche un elemento HEAD. Neat.
Altri suggerimenti
Questo è un semplice test in base alla risposta di Noè - purtroppo non lo fa (ancora) il lavoro: (
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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow