このような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タグのテキストのみが必要な場合は、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);
[〜#〜] output [〜#〜]:-
foo bar foobar baz
Jsoupを使用:-
Document doc = Jsoup.parse(str);
String text = doc.text();
実際、Jsoupでクリーンアップする正しい方法は、 ホワイトリスト
...
final String html = "<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>";
Document doc = Jsoup.parse(html);
Whitelist wl = new Whitelist().none()
String cleanText = new Jsoup().clean(doc ,wl)
それでもいくつかのタグを保持したい場合:
Whitelist wl = new Whitelist().relaxed().removeTags("a")