4

誰かがJSoupの代替を知っていますか?

または、次のようなシーケンスをきれいにする方法は<p>&nbsp;</p>?

jQuery の HTML Clean プラグインは私にとってはうまく機能しますが、クライアント側ではなくサーバー側で HTML コードのクリーニングを行うことに興味があります。

または、replaceAll 式は何をするのでしょうか??:

String cleanS = dirtyS.replaceAll("<p>&nbsp;</p>", ""); //This doesnt work

ダーティ HTML には、 #160と#32のような空白のシーケンスが混在していることを発見しました。

だから、私が必要としているのは、それらの混合物を取り除く式です。

ミックススペースブランク

4

2 に答える 2

8

あなたはOutputSettingsこれのために変更することができます:

例:

final String html = ...;


OutputSettings settings = new OutputSettings();
settings.escapeMode(Entities.EscapeMode.xhtml);

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

これはDocument、Jsoupによって解析された場合にも可能です。

Document doc = Jsoup.parse(...);
doc.outputSettings().escapeMode(Entities.EscapeMode.xhtml);

// ...

編集:

タグの削除:

doc.select("p:matchesOwn((?is) )").remove();

注意:空白ではなく、(?is)char 160(= nbsp)が表示された後。これにより、自分のテキストが。のみであるすべてのpタグが削除されます&nbsp;p:他のすべてのタグでこれを行う場合は、をで置き換えることができます*:

于 2012-10-25T15:34:56.977 に答える
1

ドキュメント オブジェクトがある場合は、paragrap 要素をループして、テキスト (または空白以外のテキスト) を含まないすべての要素を削除できます。テキストが空かどうかを確認する前に、NBSP の出現箇所を置き換えることができます。空白あり。UTF-8 ドキュメントで作業していると仮定すると、次のように動作する可能性があります。

public static final String NBSP_IN_UTF8 = "\u00a0"; 

Document オブジェクトを取得する方法を知っていると仮定すると、クリーニングのループは単純です。段落要素を選択し、空の要素を削除します。

org.jsoup.nodes.Document doc= ...   //obtain your document object  
for (org.jsoup.nodes.Element element : doc.select("p")) {
    if ( !element.hasText() || element.text().replaceAll(NBSP_IN_UTF8, "").trim().equals("") ) {
       element.remove();
    }
  }
于 2012-10-26T11:59:05.903 に答える