4

友人のためにアプリを書いていますが、問題が発生しました。ウェブサイトにはこれらがあります

<span style="display:none">&amp;0000000000000217000000</span>

そして、それらが何であるかさえわかりませんが、アプリがそれらの値を出力しているため、それらを削除する必要があります.

これが要素にあるかどうかを確認して削除する方法はありますか? for-each ループの解析がありますが、この要素を効果的に削除する方法がわかりません。

ありがとう

4

3 に答える 3

9

スタイル属性に基づいてこれらのスパンを完全に削除する場合は、次のコードを試してください。

String html = "<span style=\"display:none\">&amp;0000000000000217000000</span>";
html += "<span style=\"display:none\">&amp;1111111111111111111111111</span>";
html += "<p>Test paragraph should not be removed</p>";

Document doc = Jsoup.parse(html);

doc.select("span[style*=display:none]").remove();

System.out.println(doc);

出力は次のとおりです。

<html>
 <head></head>
 <body>
  <p>Test paragraph should not be removed</p>
 </body>
</html>
于 2012-05-21T15:55:34.290 に答える
1

これを試してください:

//Assuming you have all the data in a Document called doc:
String cleanData = doc.select("query").text();

.text(); メソッドは、すべての html タグを消去し、すべてのエンコーディングを人間が読めるコンテンツに置き換えます。そうそう、それから ownText(); メソッドがあります。それも役立つかもしれません。どちらがあなたの目的に最も適しているとは言えません。

于 2012-05-21T11:05:35.173 に答える
0

JSOUP を使用して、要素の innerHTML にアクセスし、エスケープ文字を削除して、innerHTML を置き換えることができます。

Elements elements = doc.select('span');
for(Element e : elements) {
    e.html( e.html().replaceAll("&amp;","") );
}

上記の例では、問題の文字を含むすべての要素のセレクターを使用して、すべての要素のコレクションを取得します。&amp;その後、を空の文字列または任意の文字に置き換えます。

&amp;さらに、それが文字のエスケープ コードであることを知っておく必要があります&。文字をエスケープしない&と、HTML 検証の問題が発生する可能性があります。あなたの場合、追加情報がなければ、本当にそれらを排除したいだけだと思います。そうでない場合は、これが開始に役立ちます。幸運を!

末尾の数字を削除する必要がある場合:

// eliminate ampersand and all trailing numbers
e.html( e.html().replaceAll("&amp;[0-9]*","") );

正規表現の詳細については、Javadocs on Regex Patternを参照してください。

于 2012-05-21T01:05:36.630 に答える