我又来了。
我得到了这段代码:
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中包含少于两个单词的块元素。
为什么我不能删除它们?
非常感谢你的帮助...
答案 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>