問題描述

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