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

问题描述 投票:0回答:6

我只想使用 JSOUP 从文本中删除 html 标签。我使用了这里的解决方案(我之前关于 JSOUP 的问题) 但经过一番检查后,我发现 JSOUP 对于大型 html 会出现 JAVA 堆异常: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();
}

有办法解决吗?

java html out-of-memory jsoup strip
6个回答
8
投票

或者,您可以尝试一下 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 白名单

Jsoup 1.8.3


1
投票

在谷歌中进行了多次搜索并尝试自己实现html stripper之后,我的解决方案是使用Solr的HTMLStripCharFilter类,并将escapedTags替换为标准html标签blackList

  1. 对于大文件,HTMLStripCharFilter 比 JSOUP 库和正则表达式更快
  2. HTMLStripCharFilter 对于大尺寸文件没有像 JSOUP(内存不足异常)那样的内存问题
  3. HTMLStripCharFilter 不会像正则表达式那样进入“灾难性回溯”

0
投票

我看到两种解决方案:

  1. 增加Java堆空间。生成 html 作为字符串似乎需要比您允许的更多的内存。可以使用 JVM 的

    -Xmx
    命令行参数来增加最大 JAVA 堆:

    java -Xmx512m 解析.java

  2. 您可以从基于 DOM 的 JSoup 切换到基于 SAX 的解析器,如 nekohtml 这样的解析器可以处理任何大小的 html 文档,因为它们永远不会在内存中构建完整的 DOM。


0
投票

对我来说使用 Jsoup 方法的组合就足够了:

Jsoup.clean(Jsoup.parse(htmlString).text(), Whitelist.simpleText()) 

您可以选择白名单...


0
投票

Jsoup 1.14.2,只需使用:

doc.select(cssQuery).text();

删除所有标签并返回漂亮的文本内容。就我而言,我有一对 ul、li,它很好地把它们全部剥离了。


0
投票

对我来说,这有效。 systemClientSecret = Jsoup.clean(StringEscapeUtils.escapeHtml4(systemClientSecret), Safelist.none());

其中 systemClientSecret 是一个字符串。

© www.soinside.com 2019 - 2024. All rights reserved.