0

我又来了。

我得到了这段代码:

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中仍然有块元素少于两个单词。

为什么我不能删除它们?

非常感谢你的帮助...

4

1 回答 1

2

In your code:

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

I understand what you want but passing multiple tag separated by , won't work with getElementsByTag(), it works with select() function e.g., doc.select("div, h1, h2"). However i can think of a solution using Pseudo selector :matchesOwn(regex) with reges: ^\s*\S+\s*$. Here is a short working example:

    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);

And the output:

     <p> asdd </p>

printing Document:
<html>
 <head></head>
 <body>
  <div>
    asd asd
  </div>
  <span></span>
 </body>
</html>
于 2013-10-09T19:26:32.400 回答