【问题标题】:Getting rid of html attributes and its values while parsing using jsoup使用 jsoup 解析时摆脱 html 属性及其值
【发布时间】:2019-09-18 08:04:32
【问题描述】:

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

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

更改为

<img>

同样,我希望它适用于 HTML 文档中的所有标签。

【问题讨论】:

    标签: java html jsoup


    【解决方案1】:

    如果您的目标是获得清晰的文档结构,您还需要删除文本和数据节点。考虑以下 sn-p。

    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】:

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

      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>
      

      【讨论】:

        【解决方案3】:

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

        演示:

        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>
        

        【讨论】:

          猜你喜欢
          • 2021-04-14
          • 1970-01-01
          • 2012-11-06
          • 1970-01-01
          • 2013-06-19
          • 1970-01-01
          • 1970-01-01
          • 2015-04-12
          • 1970-01-01
          相关资源
          最近更新 更多