问题描述
假设我有一个这样的 HTML 片段:
<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>
我想从中提取的是:
foo bar foobar baz
所以我的问题是:我如何从 html 中剥离所有的包装标签,只得到与 html 中相同的顺序的文本?正如您在标题中可以看到的,我想使用 jsoup 进行解析。
重音 html 的示例 (请注意’á’ 字符):
<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>
<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>
我想要的是:
Tarthatatlan biztonsági viszonyok
Tarthatatlan biztonsági viszonyok
这个 html 并不是静态的,一般来说,我只是希望以解码的人类可读形式,宽度换行符的通用 HTML 片段的每个文本。
最佳解决方法
与 Jsoup:
final String html = "<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>";
Document doc = Jsoup.parse(html);
System.out.println(doc.text());
输出:
foo bar foobar baz
如果您只想要 p-tag 的文本,请使用此代替 doc.text()
:
doc.select("p").text();
… 或只有身体:
doc.body().text();
越线:
final String html = "<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>"
+ "<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>";
Document doc = Jsoup.parse(html);
for( Element element : doc.select("p") )
{
System.out.println(element.text());
// eg. you can use a StringBuilder and append lines here ...
}
输出:
Tarthatatlan biztonsági viszonyok
Tarthatatlan biztonsági viszonyok
次佳解决方法
使用正则表达式: –
String str = "<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>";
str = str.replaceAll("<[^>]*>", "");
System.out.println(str);
输出: –
foo bar foobar baz
使用 Jsoup: –
Document doc = Jsoup.parse(str);
String text = doc.text();
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。