を使用して、不要なHTMLタグ(<script>
など)から一部のテキストを削除します
String clean = Jsoup.clean(someInput, Whitelist.basicWithImages());
問題は、たとえばå
をå
に置き換えることです(「純粋なxml」ではないため、問題が発生します)。
例えば
Jsoup.clean("hello å <script></script> world", Whitelist.basicWithImages())
収量
"hello å world"
でも欲しい
"hello å world"
これを達成する簡単な方法はありますか? (つまり、結果でå
をå
に変換するよりも簡単です。)
Jsoupのエスケープモードを構成できます。_EscapeMode.xhtml
_を使用すると、エンティティなしの出力が得られます。
以下は、str
を入力として受け入れ、Whitelist.simpleText()
を使用してクリーンアップする完全なスニペットです。
_// Parse str into a Document
Document doc = Jsoup.parse(str);
// Clean the document.
doc = new Cleaner(Whitelist.simpleText()).clean(doc);
// Adjust escape mode
doc.outputSettings().escapeMode(EscapeMode.xhtml);
// Get back the string of the body.
str = doc.body().html();
_
Jsoupのウェブサイトにはすでに機能リクエストがあります。新しい空のマップと新しいエスケープタイプを追加することにより、ソースコードを自分で拡張できます。これを実行したくない場合は、ApacheコモンズのStringEscapeUtilsを使用できます。
public static String getTextOnlyFromHtmlText(String htmlText){
Document doc = Jsoup.parse( htmlText );
doc.outputSettings().charset("UTF-8");
htmlText = Jsoup.clean( doc.body().html(), Whitelist.simpleText() );
htmlText = StringEscapeUtils.unescapeHtml(htmlText);
return htmlText;
}
&bmocからの回答は問題なく機能していますが、より短い解決策を使用することもできます。
// Clean html
Jsoup.clean(someInput, "yourBaseUriOrEmpty", Whitelist.simpleText(), new OutputSettings().escapeMode(EscapeMode.xhtml))
受け入れられた答えは_Jsoup.parse
_を使用しています。これは、ソースを一目見ただけで_Jsoup.clean
_で行われていることよりも重いようです。
Jsoup.clean(...)
のソースコードをコピーしてエスケープモードを設定する行を追加しました。これは、htmlドキュメント全体を解析する必要はなく、フラグメントを処理するだけなので、parseメソッドによって実行される不要な手順を回避する必要があります。
_private String clean(String html, Whitelist whitelist) {
Document dirty = Jsoup.parseBodyFragment(html, "");
Cleaner cleaner = new Cleaner(whitelist);
Document clean = cleaner.clean(dirty);
clean.outputSettings().escapeMode(EscapeMode.xhtml);
return clean.body().html();
}
_
これを行う簡単な方法は
// clean the html
String output = Jsoup.clean(html, Whitelist.basicWithImages());
// Parse string into a document
Document doc = Jsoup.parse(output);
// Adjust escape mode
doc.outputSettings().escapeMode(EscapeMode.xhtml);
// Get back the string
System.out.println(doc.body().html());
私はこれをテストしましたが、うまくいきます
簡単な方法:
EscapeMode em = EscapeMode.xhtml;
em.getMap().clear();
doc.outputSettings().escapeMode(em);
[〜#〜] all [〜#〜] htmlエンティティ( '、 "、&、<、>を含む)が削除されます。 EscapeMode.xhtmlはこれらのエンティティを許可します。
HTMLをドキュメントとして解析し、クリーナーを使用してドキュメントをクリーンアップして別のドキュメントを生成し、ドキュメントのoutputSettingsを取得し、適切な文字セットとエスケープモードをxhtmlに設定して、ドキュメントを文字列に変換します。テストされていませんが、動作するはずです。