JSOUP:仅允许图像标记

时间:2014-07-01 07:10:52

标签: jsoup

我想在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" />

有什么建议吗?感谢

2 个答案:

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