如何使用 Jsoup 从文本中仅删除 html 标签?

Rou*_*her 4 html java strip out-of-memory jsoup

我想使用 JSOUP 从文本中仅删除 html 标签。我使用了这里的解决方案(我之前关于 JSOUP 的问题)但经过一些检查后我发现 JSOUP 得到 JAVA 堆异常:大 html 的 OutOfMemoryError 但不是全部。例如,它在 html 2Mb 和 10000 行上失败。代码在最后一行抛出异常(不在 Jsoup.parse 上):

public String StripHtml(String html){
  html = html.replace("&lt;", "<").replace("&gt;", ">");
  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();
}
Run Code Online (Sandbox Code Playgroud)

有办法解决吗?

Ste*_*han 8

或者,您可以尝试使用 Jsoup 清理功能。下面的代码将删除位于传递的 html 字符串中的所有 html 标签。

public String StripHtml(String html) {
    return Jsoup.clean(html, Whitelist.none());
}
Run Code Online (Sandbox Code Playgroud)

白名单 ( Whitelist.none()) 告诉 Jsoup 清洁器哪些标签是允许的。如您所见,此处不允许使用任何 html 标签。任何未在白名单中引用的标签都将被删除。

您可能对其他提供的白名单感兴趣:

可以通过添加标签(请参阅addTags方法)或删除标签(请参阅removeTags方法)来自定义这些基本白名单。

如果你想创建自己的白名单(小心!),这是要走的路:

Whitelist myCustomWhitelist = new Whitelist();
myCustomWhitelist.addTags("b", "em", ...);
Run Code Online (Sandbox Code Playgroud)

在此处查看详细信息:Jsoup 白名单

汤1.8.3