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

Posted

技术标签:

【中文标题】如何使用jsoup取消注释html标签【英文标题】:How to uncomment html tags using jsoup 【发布时间】:2014-01-11 21:30:06 【问题描述】:

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

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

<p> foo bar </p>

【问题讨论】:

【参考方案1】:

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

    查找所有评论节点 为每条评论提取数据属性 在当前评论节点之后插入一个包含数据的新节点 删除评论节点

看看这段代码:

 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>

【讨论】:

评论类,这是关键。

以上是关于如何使用jsoup取消注释html标签的主要内容,如果未能解决你的问题,请参考以下文章

如何使用JS或Jquery在</html>之后插入HTML注释标签[重复]

Jquery取消注释head标签内的第二个孩子

html多行注释如何实现?

如何在 Visual Studio Code 中注释多行?

如何在 Office VBA 编辑器中注释和取消注释代码块

如何通过python忽略正则表达式中的html注释标签