如何将 HTML 文本转换为纯文本? [复制]
Posted
技术标签:
【中文标题】如何将 HTML 文本转换为纯文本? [复制]【英文标题】:how to convert HTML text to plain text? [duplicate] 【发布时间】:2011-04-06 04:43:49 【问题描述】:朋友的 我必须从url解析描述,其中解析的内容很少有html标签,所以我怎样才能将它转换为纯文本。
【问题讨论】:
您的具体要求是什么?您需要去除 HTML 标签吗?提取特定标签的内容? 我可以提取内容,但内容有zcc dsdfsf ddfdfsf
sfdfdfdfdf,就像上面我正在获取我的数据但我需要是一个简单的纯文本。没有那些 html 标签 类似的问题在这里有很好的答案:***.com/questions/1518675/…。我使用了 Jericho,效果很好。 您应该将此问题标记为已回答。 ***.com/q/240546/873282、***.com/q/1699313/873282、***.com/q/1518675/873282 和 ***.com/q/832620/873282 的副本 【参考方案1】:是的,Jsoup 将是更好的选择。只需执行以下操作即可将整个 HTML 文本转换为纯文本。
String plainText= Jsoup.parse(yout_html_text).text();
【讨论】:
为了保留换行符,您现在还可以使用Jsoup.parse(html).wholeText()
【参考方案2】:
去掉 HTML 标签很简单:
// replace all occurrences of one or more HTML tags with optional
// whitespace inbetween with a single space character
String strippedText = htmlText.replaceAll("(?s)<[^>]*>(\\s*<[^>]*>)*", " ");
但不幸的是,要求从来没有那么简单:
通常,<p>
和 <div>
元素需要单独处理,可能有带有 >
字符(例如 javascript)的 cdata 块会弄乱正则表达式等。
【讨论】:
了解为什么这不适用于一般情况,并且不会是 f(u|oo)l-proof:RegEx match open tags except XHTML self-contained tags 爱它...如此简单,却如此强大【参考方案3】:您可以使用这一行来删除 html 标记并将其显示为纯文本。
htmlString=htmlString.replaceAll("\\<.*?\\>", "");
【讨论】:
【参考方案4】:使用像htmlCleaner这样的HTML解析器
详细解答:How to remove HTML tag in Java
【讨论】:
【参考方案5】:使用 Jsoup。
添加依赖
<dependency>
<!-- jsoup HTML parser library @ https://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
现在在您的 java 代码中:
public static String html2text(String html)
return Jsoup.parse(html).wholeText();
只需调用方法 html2text 并传递 html 文本,它将返回纯文本。
【讨论】:
【参考方案6】:我建议通过 jTidy 解析原始 HTML,它应该会为您提供可以编写 xpath 表达式的输出。这是我发现的最可靠的 HTML 抓取方式。
【讨论】:
【参考方案7】:如果你想像浏览器显示一样解析,使用:
import net.htmlparser.jericho.*;
import java.util.*;
import java.io.*;
import java.net.*;
public class RenderToText
public static void main(String[] args) throws Exception
String sourceUrlString="data/test.html";
if (args.length==0)
System.err.println("Using default argument of \""+sourceUrlString+'"');
else
sourceUrlString=args[0];
if (sourceUrlString.indexOf(':')==-1) sourceUrlString="file:"+sourceUrlString;
Source source=new Source(new URL(sourceUrlString));
String renderedText=source.getRenderer().toString();
System.out.println("\nSimple rendering of the HTML document:\n");
System.out.println(renderedText);
我希望这也有助于以浏览器格式解析表格。
谢谢, 象头神
【讨论】:
投反对票的人能否解释一下他们投反对票的原因?【参考方案8】:我需要包含 FreeMarker 标签的一些 HTML 的纯文本表示。问题是通过 JSoup 解决方案交给我的,但 JSoup 正在转义 FreeMarker 标记,从而破坏了功能。我还尝试了 htmlCleaner (sourceforge),但留下了 HTML 标题和样式内容(已删除标签)。 http://***.com/questions/1518675/open-source-java-library-for-html-to-text-conversion/1519726#1519726
我的代码:
return new net.htmlparser.jericho.Source(html).getRenderer().setMaxLineLength(Integer.MAX_VALUE).setNewLine(null).toString();
maxLineLength
确保不会人为地将行换行为 80 个字符。
setNewLine(null)
使用与源相同的换行符。
【讨论】:
【参考方案9】:我使用HTMLUtil.textFromHTML(value)
来自
<dependency>
<groupId>org.clapper</groupId>
<artifactId>javautil</artifactId>
<version>3.2.0</version>
</dependency>
【讨论】:
【参考方案10】:使用 Jsoup,我得到了同一行中的所有文本。
所以我使用以下代码块来解析 HTML 并保留新行:
private String parseHTMLContent(String toString)
String result = toString.replaceAll("\\<.*?\\>", "\n");
String previousResult = "";
while(!previousResult.equals(result))
previousResult = result;
result = result.replaceAll("\n\n","\n");
return result;
不是最好的解决方案,但解决了我的问题:)
【讨论】:
以上是关于如何将 HTML 文本转换为纯文本? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Ajax 将 Summernote 文本从 JSON 数据转换为纯文本?