2012-04-11 29 views
7

Creo que se ha formulado esta pregunta, pero no encontré nada.¿Cómo puedo atravesar el árbol HTML con Jsoup?

Desde el elemento Document en Jsoup, ¿cómo puedo recorrer todos los elementos en el contenido HTML?

Estaba leyendo la documentación y estaba pensando en usar el método childNodes(), pero solo toma los nodos de un nivel inferior (lo que yo entiendo). Creo que puedo usar alguna recursión con este método, pero quiero saber si hay una manera más apropiada/nativa para hacer esto.

Respuesta

18

De Document (y cualquier subclase Node), puede utilizar el método traverse(NodeVisitor).

Por ejemplo:

document.traverse(new NodeVisitor() { 
    public void head(Node node, int depth) { 
     System.out.println("Entering tag: " + node.nodeName()); 
    } 
    public void tail(Node node, int depth) { 
     System.out.println("Exiting tag: " + node.nodeName()); 
    } 
}); 
-1

Usted puede utilizar el siguiente código:

public class JsoupDepthFirst { 

    private static String htmlTags(Document doc) { 
     StringBuilder sb = new StringBuilder(); 
     htmlTags(doc.children(), sb); 
     return sb.toString(); 
    } 

    private static void htmlTags(Elements elements, StringBuilder sb) { 
     for(Element el:elements) { 
      if(sb.length() > 0){ 
       sb.append(","); 
      } 
      sb.append(el.nodeName()); 
      htmlTags(el.children(), sb); 
      sb.append(",").append(el.nodeName()); 
     } 
    } 

    public static void main(String... args){ 
     String s = "<html><head>this is head </head><body>this is body</body></html>"; 
     Document doc = Jsoup.parse(s); 
     System.out.println(htmlTags(doc)); 
    } 
} 
0

1) Puede seleccionar todos los elementos del documento utilizando * selector.

Elements elements = document.body().select("*"); 

2) Para recuperar texto de cada uno individualmente utilizando el método Element.ownText().

for (Element element : elements) { 
    System.out.println(element.ownText()); 
} 

3) Para modificar el texto de cada forma individual utilizando Element.html (String strHTML). (borra cualquier HTML interno existente en un elemento y lo reemplaza con HTML analizado.)

element.html(strHtml); 

Espero que esto te ayude. ¡Gracias!

Cuestiones relacionadas