2012-04-11 4 views
7

Ich denke, diese Frage wurde gestellt, aber ich habe nichts gefunden.Wie kann ich den HTML-Baum mit Jsoup durchlaufen?

Von der Document Element in Jsoup, wie kann ich für alle Elemente im HTML-Inhalt durchqueren?

Ich las die Dokumentation und ich dachte über die Verwendung der childNodes() Methode, aber es dauert nur die Knoten von einem leval unten (was ich verstehe). Ich denke, ich kann eine Rekursion mit dieser Methode verwenden, aber ich möchte wissen, ob es eine geeignetere Methode gibt, dies zu tun.

Antwort

18

Von Document (und einer beliebigen Unterklasse Node) können Sie die Methode traverse(NodeVisitor) verwenden.

Zum Beispiel:

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

Sie können den folgenden Code verwenden:

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) Sie können alle Elemente des Dokuments wählen Sie mit * Selektor.

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

2) Zum Abrufen von Text jedes einzelnen einzeln mit Element.ownText() -Methode.

3) Ändern Sie den Text jedes einzeln mit Element.html (String strHtml). (Löscht alle vorhandenen inneren HTML in einem Element, und ersetzt sie durch geparsten HTML.)

element.html(strHtml); 

Hope this Ihnen helfen. Vielen Dank!