如何使用jsoup取消注释html标签

时间:2013-12-23 16:25:48

标签: java html dom tags jsoup

我想知道是否可以使用jsoup取消注释html标签,例如更改:

<!--<p> foo bar </p>-->

<p> foo bar </p>

1 个答案:

答案 0 :(得分:7)

是的,这是可能的。这是解决这个问题的一种方法:

  1. 查找所有评论节点
  2. 为每个评论提取数据属性
  3. 在当前注释节点
  4. 之后插入包含数据的新节点
  5. 删除评论节点
  6. 看一下这段代码:

     public class UncommentComments {
            public static void main(String... args) {
                String htmlIn = "<html><head></head><body>"
                        + "<!--<div> hello there </div>-->"
                        + "<div>not a comment</div>"
                        + "<!-- <h5>another comment</h5> -->" 
                        + "</body></html>";
                Document doc = Jsoup.parse(htmlIn);
                List<Comment> comments = findAllComments(doc);
                for (Comment comment : comments) {
                    String data = comment.getData();
                    comment.after(data);
                    comment.remove();
                }
                 System.out.println(doc.toString());
            }
    
            public static List<Comment> findAllComments(Document doc) {
                List<Comment> comments = new ArrayList<>();
                for (Element element : doc.getAllElements()) {
                    for (Node n : element.childNodes()) {
                        if (n.nodeName().equals("#comment")){
                            comments.add((Comment)n);
                        }
                    }
                }
                return Collections.unmodifiableList(comments);
            }
        }
    

    鉴于此html文档:

    <html>
      <head></head>
      <body>
        <!--<div> hello there </div>-->
        <div>not a comment</div>
        <!-- <h5>another comment</h5> --> 
      </body>
    </html>
    

    将导致此输出:

    <html>
      <head></head>
      <body>
        <div>hello there</div>
        <div>not a comment</div> 
        <h5>another comment</h5> 
      </body>
    </html>