2011-09-24 23 views

Trả lời

30

Khi tìm kiếm về cơ bản bạn sử dụng Elements.select(selector) trong đó selector được xác định bởi this API. Tuy nhiên, các nhận xét không phải là các yếu tố về mặt kỹ thuật, do đó bạn có thể bị nhầm lẫn ở đây, chúng vẫn là các nút được xác định bằng tên nút #comment.

Chúng ta hãy xem làm thế nào mà có thể làm việc:

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Node; 

public class RemoveComments { 
    public static void main(String... args) { 
     String h = "<html><head></head><body>" + 
      "<div><!-- foo --><p>bar<!-- baz --></div><!--qux--></body></html>"; 
     Document doc = Jsoup.parse(h); 
     removeComments(doc); 
     doc.html(System.out); 
    } 

    private static void removeComments(Node node) { 
     for (int i = 0; i < node.childNodesSize();) { 
      Node child = node.childNode(i); 
      if (child.nodeName().equals("#comment")) 
       child.remove(); 
      else { 
       removeComments(child); 
       i++; 
      } 
     } 
    }   
} 
+0

hmm này đem lại cho tôi một gõ lỗi – user1893354

+1

Nếu bạn có thể nhận được phiên bản 6 tuổi của Jsoup, nó đã hoạt động trở lại sau đó. Nếu không, nếu api được cập nhật, tôi hoan nghênh các bản sửa lỗi để cập nhật ví dụ này. Dường như danh sách ChildNodes được thực hiện không thể sửa đổi trong một số phiên bản. – dlamblin

-1

đó là tốt và mã này làm việc

doc.select("#comment").remove(); 

và theo mã loại bỏ nhiều thẻ

doc.select("script, style, meta, link, comment, CDATA, #comment").remove(); 
+1

'doc.select (" # comment "). Remove();' không hoạt động, không xóa nhận xét html. Nó đã làm việc cho bạn? – yetanothercoder

+3

'doc.select (" # comment "). Remove()' có nghĩa là "Hủy bỏ bất kỳ nút nào có trường id bằng 'bình luận'." – Stephan

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