問題描述
假設我有一個這樣的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。