2011-10-26 32 views
3

私は、followロジックを含むテーブルを持っています。JSoup:特定の属性を含まない要素を取得します。

  1. <tr class=hiderow><td class=packagename>...</td></tr>を含む行毎
  2. のテーブル表示リスト - >この行が表示されません。

テーブルには100行が含まれていますが、20行にclass=hiderowが含まれている場合は、ページ上に80行しか表示されません。私はそれらの80行(100ではない)の名前を取得したい。だから私はclass=hiderowを含まないデータを解析する必要があります。私はjsoupを使用してすべての名前を取得する方法を知っている、私はまた、文書内にある参照してください :not(selector) elements that do not match the selector.しかし、私はそれを使用する方法がわかりません。助けてください。

EDIT私はそれを行う方法を理解しています。より良い方法があれば教えてください。
EDIT2下記のBalusCのソリューションをご利用ください。はるかにクリーンです。

あなたは(あなたのケースでは trである)関心の要素に :not()を適用し、要素が .hiderowある ないマッチ(べきで、その中に要素の相対CSSセレクタを渡す必要があり
public void obtainPackageName(String urlLink) throws IOException{ 
    List<String> pdfList = new ArrayList<String>(); 
    URL url = new URL(urlLink); 
    Document doc = Jsoup.parse(url, 3000); 
    Element table = doc.select("table[id=mastertableid]").first(); 
    Iterator<Element> rowIter = table.select("tr").iterator(); 
    while(rowIter.hasNext()){ 
     Element row = rowIter.next(); 
     if(!row.className().contains("hiderow")){ 
      Element packageName = row.select("td[class=packagename]").first(); 
      if(packageName != null){ 
       pdfList.add(packageName.text()); 
      } 

     } 
    } 
} 

答えて

7

あなたの場合)。

だから、これは実行する必要があります。

Document document = Jsoup.connect(urlLink).get(); 
Elements packagenames = document.select("#mastertableid tr:not(.hiderow) td.packagename"); 
List<String> pdfList = new ArrayList<String>(); 

for (Element packagename : packagenames) { 
    pdfList.add(packagename.text()); 
} 
+0

これは非常にきれいに見える、私はこれをしようとします。 TY BalusC –

+0

ありがとうBalusC。それはとてもうまくいった。 TY –

+0

ようこそ。 – BalusC

関連する問題