有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在使用jsoup解析时摆脱html属性及其值

我试图以这样一种方式解析多个html文档,只得到丢弃其所有属性和值的标记。谁能帮帮我吗

例如:<img src="pic_trulli.jpg" alt="Italian Trulli">

更改为

<img>

类似地,我希望它适用于HTML文档中的所有标记


共 (3) 个答案

  1. # 1 楼答案

    如果您的目标是接收清晰的文档结构,那么还需要删除文本和数据节点。考虑下面的片段。

    Document document = Jsoup.connect("http://example.com").get();
    document.getAllElements().forEach(element -> {
          element.attributes().asList().forEach(attr -> element.removeAttr(attr.getKey()));
          element.textNodes().forEach(Node::remove);
          element.dataNodes().forEach(Node::remove);
        });
    System.out.println(document);
    

    输出:

    <!doctype html>
    <html>
     <head>
      <title></title>
      <meta>
      <meta>
      <meta>
      <style></style>
     </head>
     <body>
      <div>
       <h1></h1>
       <p></p>
       <p><a></a></p>
      </div>
     </body>
    </html>
    
  2. # 2 楼答案

    您可以遍历文档中的所有元素,然后遍历每个元素的属性,这应该允许您删除它们

    演示:

    String html = "<img src=\"pic_trulli.jpg\" alt=\"Italian Trulli\">" +
            "<div class=\"foo\"><a href=\"pic_trulli.jpg\" alt=\"Italian Trulli\" non-standard></div>";
    Document doc = Jsoup.parse(html);
    
    System.out.println(doc);
    for (Element el : doc.getAllElements()){
        for (Attribute atr : el.attributes().asList()){
            el.removeAttr(atr.getKey());
        }
    }
    System.out.println("  -");
    System.out.println(doc);
    

    输出:

    <html>
     <head></head>
     <body>
      <img src="pic_trulli.jpg" alt="Italian Trulli">
      <div class="foo">
       <a href="pic_trulli.jpg" alt="Italian Trulli" non-standard></a>
      </div>
     </body>
    </html>
      -
    <html>
     <head></head>
     <body>
      <img>
      <div>
       <a></a>
      </div>
     </body>
    </html>
    
  3. # 3 楼答案

    要删除单个元素的属性,可以使用以下方法:

    element.attributes().asList()
            .stream().map(Attribute::getKey)
            .forEach(element::removeAttr);
    

    要删除所有元素的属性,可以将其与document.getAllElements()结合使用:

    Document document = Jsoup.parse("<img src=\"pic_trulli.jpg\" alt=\"Italian Trulli\">");
    document.getAllElements()
            .forEach(e -> e.attributes().asList()
                    .stream().map(Attribute::getKey)
                    .forEach(e::removeAttr));
    

    结果将是:

    <html>
     <head></head>
     <body>
      <img>
     </body>
    </html>