13

一部の入力を処理するために Jsoup.clean(String, Whitelist) を使用していますが、Jsoup が許容可能なタグの直前に不要な改行を追加しているようです。インターネット上でこの問題を投稿している人を何人か見ましたが、解決策を突き止めることができませんでした。

たとえば、次のように太字のタグが含まれる非常に単純な文字列があるとします。

String htmlToClean = "This is a line with <b>bold text</b> within it."                                                                                                                                                       
String returnString =  Jsoup.clean(htmlToClean, Whitelist.relaxed());
System.out.println(returnString);

clean() メソッドの呼び出しから得られるものは、次のようなものです。

This is a line with \n<b>bold text</b> within it. 

太字の開始タグの直前に余分な「\n」が追加されていることに注意してください。これが追加されているソースを追跡できないようです (確かに、私は Jsoup を初めて使用します)。

この問題に遭遇した人はいますか? さらに良いことに、この余分な不要な文字がこのように文字列に追加されるのを回避する方法を見つけましたか?

4

2 に答える 2

14

うーん...これに関するオプションは見たことがありません。

html を解析すると、Documentいくつかの出力設定があります。

Document doc = Jsoup.parseBodyFragment(htmlToClean);
doc.outputSettings().prettyPrint(false);

System.out.println(doc.body().html());

オフにprettyPrintすると、次の出力が得られます。This is a line with <b>bold text</b> within it.

clean()実装されたメソッドはを使用するため、独自のメソッドを作成できるかもしれませんDocument(無効にすることができますprettyPrint):

元の方法:

public static String clean(String bodyHtml, Whitelist whitelist) {
    return clean(bodyHtml, "", whitelist);
}

public static String clean(String bodyHtml, String baseUri, Whitelist whitelist) {
    Document dirty = parseBodyFragment(bodyHtml, baseUri);
    Cleaner cleaner = new Cleaner(whitelist);
    Document clean = cleaner.clean(dirty);
    return clean.body().html();
}
于 2012-09-19T21:49:15.733 に答える
8

補遺:

Jsoup 1.7.1をダウンロードしたところです。このバージョンでは、clean()-method を customで使用できOutputSettingsます。

String html = "This is a line with <b>bold text</b> within it.";

OutputSettings settings = new OutputSettings();
settings.prettyPrint(false);

String clean = Jsoup.clean(html, "", Whitelist.relaxed(), settings);

または短い:

String clean = Jsoup.clean(html, "", Whitelist.relaxed(), new OutputSettings().prettyPrint(false));

(実際には、コメントに投稿されたのと同じソリューションです)

于 2012-09-25T09:46:58.053 に答える