2012-04-11 24 views
7

Tôi nghĩ rằng câu hỏi này đã được hỏi, nhưng tôi không tìm thấy bất cứ điều gì.Tôi có thể duyệt cây HTML bằng Jsoup bằng cách nào?

Từ các yếu tố Document trong Jsoup, làm thế nào tôi có thể đi qua cho tất cả các yếu tố trong nội dung HTML?

Tôi đã đọc tài liệu và tôi đã suy nghĩ về cách sử dụng phương pháp childNodes(), nhưng nó chỉ mất các nút từ một mức dưới đây (những gì tôi hiểu). Tôi nghĩ rằng tôi có thể sử dụng một số đệ quy với phương pháp này, nhưng tôi muốn biết nếu có một cách thích hợp hơn/bản địa để làm điều này.

Trả lời

18

Từ Document (và bất kỳ Node phân lớp) nào, bạn có thể sử dụng phương thức traverse(NodeVisitor).

Ví dụ:

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

Bạn có thể sử dụng đoạn mã sau:

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) Bạn có thể chọn tất cả các yếu tố của tài liệu sử dụng * selector.

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

2) Để truy xuất văn bản của từng cá nhân bằng phương thức Element.ownText().

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

3) Để sửa đổi văn bản của từng cá nhân sử dụng Element.html (Chuỗi strHtml). (xóa mọi HTML bên trong hiện có trong một phần tử và thay thế nó bằng HTML được phân tích cú pháp.)

element.html(strHtml); 

Hy vọng điều này sẽ giúp bạn. Cảm ơn bạn!

Các vấn đề liên quan