我使用白名单如下:
Document doc = Jsoup.parse(urls[0], 5000);
if (doc != null){
Whitelist wl = Whitelist.basicWithImages();
// wl.preserveRelativeLinks(false);
Cleaner cleaner = new Cleaner(wl);
cleanedDoc=cleaner.clean(doc);
if (cleanedDoc != null){
whiteListedHtml = cleanedDoc.html();
}
}
}catch(IOException e){
Log.d(TAG,"exception="+e.getMessage());
}
现在这非常接近我想做的事情,除了: 有div标签,其类有" nav"或者" ad"并填写页面 带有红色。我想保留div标签,但不是如果班级碰巧有“导航”标签。或者' ad'出现在其中。
这让我想到了继承白名单...... RTFM http://jsoup.org/apidocs/org/jsoup/safety/Whitelist.html我明白了 addTag()和removeTag()(以某种方式removeTag()不可用,但这是另一个问题)。我真正想要做的是删除当且仅当标签的类包含刺激中的某些值,例如' ad'或者' nav'。 看起来充满希望的唯一方法是:
protected boolean isSafeTag(String tag)
Test if the supplied tag is allowed by this whitelist
Parameters:
tag - test tag
Returns:
true if allowed
那么我怎样才能拿出这个字符串的类值进行测试?无论如何在没有继承白名单的情况下进行此检查吗?
答案 0 :(得分:0)
您可以做的一件事是手动删除<div class='ad'>
之类的标签。首先,将div
标记添加到白名单中(否则清理工具会删除它们)
Whitelist wl = Whitelist
.basicWithImages()
.addTags("div");
之后,选择要删除的所有元素,然后......只需删除它们^^
doc
.select("div[class=\"nav\"]")
.forEach(e -> e.remove());
(您也可以使用通配符 - 请参阅selector-syntax)
然后像你一样清理文档。
注意:你也可以反过来做 - 先清理,然后删除