jsoup不会删除元素

时间:2013-10-09 17:51:36

标签: java jsoup

我又来了。

我得到了这段代码:

this.doc = Jsoup.parse(str);
        Elements tables = doc.getElementsByTag("table");
        if(tables!=null){
            for(Element table : tables){
                if(table != null){
                    Elements tds=table.getElementsByTag("td");
                    if(tds!=null){
                        for(Element td : tds){
                            String[] text=td.text().trim().split("\\s+");
                            if(text.length<2)td.remove();
                        }
                    }
                }
            }
        }
        Elements hs = doc.getElementsByTag("h1, h2, h3, h4");
        if(hs!=null)for(Element h : hs)if(h != null)h.remove();
        Elements blocks = doc.getElementsByTag("div, center, li, p, address, aside, audio, blockquote, canvas, dd, dl, fieldset, figcaption, figure, footer, form, header, hr, hgroup, li, ol, noscript, output, pre, section");
        if(blocks!=null){
            System.out.println(blocks.size());
            for(Element block : blocks){
                if(block != null){
                    String[] text=block.text().trim().split("\\s+");
                    if(text.length<2)block.remove();
                }
            }
        }
        Elements pdp = doc.getElementsByClass("pineDeletePoint");
        if(pdp!=null&&pdp.size()>0)pdp.remove();
        str = this.doc.outerHtml();

但是我仍然有我的html中包含少于两个单词的块元素。

为什么我不能删除它们?

非常感谢你的帮助...

1 个答案:

答案 0 :(得分:2)

在您的代码中:

Elements hs = doc.getElementsByTag("h1, h2, h3, h4"); 

我了解您的需求,但是传递由,分隔的多个标记不能与getElementsByTag()一起使用,它适用于select()函数,例如doc.select("div, h1, h2")。但是我可以想到使用带有reges::matchesOwn(regex)伪选择器 ^\s*\S+\s*$的解决方案。这是一个简短的工作示例:

    String data = "<div>  asd asd</div><span><p>  asdd </p></span>";
    Document doc = Jsoup.parse(data);
    Elements elms = doc.select(":matchesOwn(^\\s*\\S+\\s*$)");
          // do whatever you are going to do with elms
    System.out.println(elms);  // print the elements having less than two words
    elms.remove(); // remove all elements from document which contains 
                   //  less than 2 words in their own text  
    System.out.println("\nprinting Document:\n"+doc);

输出:

     <p> asdd </p>

printing Document:
<html>
 <head></head>
 <body>
  <div>
    asd asd
  </div>
  <span></span>
 </body>
</html>