2016-08-17 2 views
0

私はプロジェクトに取り組んでいます。私はページのレイアウトに興味があり、テキストには興味がありません。私は現在、テキストレベルですべての要素を取り除くことに問題があります。例えば:Jsoupでテキストレベルのすべての要素を削除するには?

私はテキストレベルで要素 UL、李、pとH3を取り除くが、これはページのレイアウトの一部であるとして、DIVおよびメニュー項目のリストを維持したい
<div> 
    <ul> 
     <li>some menu item</li> 
     <li>some menu item</li> 
     <li>some menu item</li> 
    </ul> 
</div> 
<div> 
    <h3>Tile of some text</h3> 
    <p></p> 
    <p>some text</p> 
    <ul> 
     <li>some other text</li> 
     <li>some other text</li> 
     <li>some other text</li> 
    </ul> 
</div> 

。 Jsoupでこれをどうやってやるの?

私はdocument.select()でこれを行い、その要素を.remove()しようとしましたが、このような非標準クエリに対してはselect関数は作成されていません。

EDIT:私が取得したい最終的な結果は次のとおりです。

<div> 
    <ul> 
     <li>some menu item</li> 
     <li>some menu item</li> 
     <li>some menu item</li> 
    </ul> 
</div> 
<div> 

</div> 

あなたは、ULタグがそれらのテキストとタグと同じレベルにあるとき、それはリストを削除見ることができるように。 ulタグは、ページ上のテキストの一部であり、ページのレイアウトとは関係ありません。メニュー項目があるulタグは、そこにメニューがあり、3つの異なる項目があることを定義するので、ページにとって重要です。

+0

あなたはHTMLがあなたの変更後、のようになります方法の例をお願いできますか? – CanB

答えて

0

私は最初に取り除きたいタグを見つけ、その親にempty()を呼び出しました。あなたは、標準ですべてpliul要素を選択して削除することができます

public static void main(String[] args) { 
     String html = "<div> <ul> <li>some menu item</li> <li>some menu item</li> <li>some menu item</li> </ul></div><div> <h3>Tile of some text</h3> <p></p> <p>some text</p> <ul> <li>some other text</li> <li>some other text</li> <li>some other text</li> </ul></div>"; 
     Document doc = Jsoup.parse(html.toString()); 
     Elements elements = doc.body().select("*"); 
     for (Element element : elements) { 
      if ("h3".equals(element.tagName()) || "p".equals(element.tagName())) { 
       element.parent().empty(); 
      } 
     } 
     System.out.println(doc.toString()); 
    } 
+0

OK、編集した回答を確認してください。 – CanB

+0

要素をテキストで検索するためのよりクリーンな方法はありますか?私はif文でこれらのタグ名の外観が気に入らない。 – k0enf0rNL

0

for (Element element : doc.select("p")) { 
    element.remove(); 
} 
関連する問題