我想在JSOUP中帮助只允许图像标记。
我的字符串看起来像这样:
<p>some text here</p>
<p>some text here</p>
<p><img alt="alt" src="http://www.example.com/image.jpg" /></p>
<p><img alt="alt" src="http://www.example.com/image.jpg" /></p>
<p>some text here</p>
在JSOUP中使用此代码我设法得到以下内容:
Whitelist customwhitelist1 = new Whitelist();
customwhitelist1.addAttributes("img", "src", "alt");
String final = Jsoup.clean(unsafe, customwhitelist1);
some text heresome text here
<img alt="alt" src="http://www.example.com/image.jpg" />
<img alt="alt" src="http://www.example.com/image.jpg" />
some text here
但我的最终输出应该是
<img alt="alt" src="http://www.example.com/image.jpg" />
<img alt="alt" src="http://www.example.com/image.jpg" />
有什么建议吗?感谢
答案 0 :(得分:1)
如果您只需要文档中的img标记,则无需使用白名单。相反,你可以这样做
doc.html(doc.select("img").toString());
此外,如果您希望文档正文仅包含img标记,那么请执行
doc.body().html(doc.select("img").toString());
答案 1 :(得分:0)
当您使用JSoup进行清理时,它不会删除InnerText
值,因此要获得您想要的结果,您必须在运行干净之前删除<p>
标记。
首先,您必须使用文本删除<p>
标记,并且由于其中没有子节点,您可以通过选择其中删除它们。
//Select all the p-tags, if they have a zero size list of children, remove them
Document doc = Jsoup.parse(html);
for (Element e : doc.select("p")) {
if(e.children().size() == 0){
e.remove();
}
}
之后,清理文档!
String final = Jsoup.clean(doc.body().html(), customwhitelist1);