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 ...

¿Fue útil?

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
scroll top