47

次のような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 フラグメントのすべてのテキストをデコードされた人間が読める形式、幅の改行にしたいだけです。

4

3 に答える 3

64

Jスープで:

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
于 2012-10-17T21:38:06.427 に答える
15

正規表現の使用: -

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();
于 2012-10-17T21:35:03.040 に答える