我想用JSOUP从文本中删除只有html标签。我在这里使用了解决方案(my previous question about JSOUP) 但经过一些检查后,我发现JSOUP获得了JAVA堆异常:大型htmls的OutOfMemoryError,但并非所有。例如,它在html 2Mb和10000行上失败。代码在最后一行抛出异常(不在Jsoup.parse上):
public String StripHtml(String html){
html = html.replace("<", "<").replace(">", ">");
String[] tags = getAllStandardHtmlTags;
Document thing = Jsoup.parse(html);
for (String tag : tags) {
for (Element elem : thing.getElementsByTag(tag)) {
elem.parent().insertChildren(elem.siblingIndex(),elem.childNodes());
elem.remove();
}
}
return thing.html();
}
有没有办法解决它?
答案 0 :(得分:3)
或者,您可以尝试Jsoup清洁功能。下面的代码将删除传递的html字符串中的所有html标记。
public String StripHtml(String html) {
return Jsoup.clean(html, Whitelist.none());
}
白名单(Whitelist.none()
)告诉Jsoup清洁器允许哪些标签。如您所见,此处不允许使用任何html标签。未删除白名单中引用的任何标签。
您可能对其他提供的白名单感兴趣:
可以通过添加标记(请参阅addTags
方法)或删除标记(请参阅removeTags
方法)来自定义这些基本白名单。
如果你想创建自己的白名单(小心!),可以采用以下方法:
Whitelist myCustomWhitelist = new Whitelist();
myCustomWhitelist.addTags("b", "em", ...);
请在此处查看详细信息:Jsoup Whitelists
Jsoup 1.8.3
答案 1 :(得分:1)
经过多次搜索谷歌并经过一些尝试自己实施html脱衣舞后,我的解决方案是使用HTMLStripCharFilter class of Solr将 escapedTags 替换为带有标准html标签的 blackList 。
答案 2 :(得分:0)
我看到两个解决方案:
增加Java堆空间。似乎将html生成为字符串需要的内存比允许的多。可以使用JVM的-Xmx
命令行参数来增加最大JAVA堆:
java -Xmx512m parsing.java
您可以从基于DOM的JSoup切换到基于SAX的解析器,如nekohtml这样的解析器可以处理任何大小的html文档,因为它们永远不会在内存中构建完整的DOM。
答案 3 :(得分:0)
对我而言,足以使用Jsoup方法的组合:
Jsoup.clean(Jsoup.parse(htmlString).text(), Whitelist.simpleText())
您可以选择的白名单...