2016-08-22 3 views
0
<div class="item-container"> 
    <h4 class="title">Item 1</h4> 
    <h4 class="impact"><i class="exclamation point"></i>Impact:High</h4> 
</div> 


<div class="item-container"> 
    <h4 class="title">Item 2</h4> 
</div> 

私はjsoupマスターが必要です。以下の要素に基づいてテキストを出力します。

「アイテム1」のテキスト(「h4」の直後に「インパクト」という別のクラスがある)だけを取りたいと思っています。これはどうすればいいですか?

はこれまでのところ、私は正しいクラスからすべてのH4のをつかむことができるだけですが、周囲の要素に基づいて出力をフィルタリングすることができません:

import java.io.File; 
import java.io.IOException; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.select.Elements; 

public class GetItem { 

public static void main(String[] args) throws IOException { 

    File input = new File("D:\\html.html"); 
    Document doc = Jsoup.parse(input, "UTF-8"); 

    Elements div = doc.select("div.item-container"); 
    Elements h4 = doc.select("div.item-container > h4.title"); 

    for (int i = 0; i < h4.size(); i++) { 
     System.out.println("Item: " + h4.get(i).text()); 
    } 
    } 
} 

答えて

1

あなたは、次のコードを使用することができます(私がテストしてみましたJsoup 1.9.2とそれ):

File input = new File("D:\\html.html"); 
Document doc = Jsoup.parse(input, "UTF-8"); 
Elements h4 = doc.select("div.item-container > h4.title"); 

for (Element e : h4) { 
    if (e.nextSibling() != null && e.nextElementSibling().hasClass("impact")) { 
     System.out.println("Item: " + e.text()); 
} 

アイデアは、あなたがやったように、すべてのh4 elemnetsを取得し、それらのそれぞれのためのテスト、それは兄弟を持っている場合、そうであればしている - 兄弟がクラスを持っている場合impact

関連する問題