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

Jal*_*rdo 5 html java tags dom jsoup

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

<!--<p> foo bar </p>-->
Run Code Online (Sandbox Code Playgroud)

<p> foo bar </p>
Run Code Online (Sandbox Code Playgroud)

Kai*_*nad 7

对的,这是可能的.以下是解决此问题的一种方法:

  1. 查找所有评论节点
  2. 对于每个注释,提取数据属性
  3. 在当前注释节点之后插入包含数据的新节点
  4. 删除注释节点

看看这段代码:

 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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

给出这个HTML文档:

<html>
  <head></head>
  <body>
    <!--<div> hello there </div>-->
    <div>not a comment</div>
    <!-- <h5>another comment</h5> --> 
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

将导致此输出:

<html>
  <head></head>
  <body>
    <div>hello there</div>
    <div>not a comment</div> 
    <h5>another comment</h5> 
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)