2016-08-02 2 views
2

私はHTMLドキュメントを持っています。データのタグには、指定された文字列を含む<td>タグの13番目の<td>タグであることを除いて、一意の識別子はありません。Jsoupのコンテンツでタグを選択し、指定されたタグの後ろにn番目のタグを取得する

たとえば、文書内の10th <td>タグには「dog」という単語が含まれています(つまり、<td>dog</td>)。文書内の他の<td>タグには同じデータが含まれていません。 という単語 "dog"が与えられていれば、Jsoupメソッドを使用して文書内の2323 <td>タグ内のコンテンツを抽出することは可能ですか?

編集:このような文書で

<td>Cat</td> 
    <td align="center">40</td> 
    <td align="center">67</td> 
    <td align="center">58<br>0</td> 
    <td align="center">32</td> 
<td>Dog</td> 
    <td align="center">0</td> 
    <td align="center">0</td> 
    <td align="center">58<br>0</td> 
    <td align="center">99</td> 
<td>Snake</td> 
    <td align="center">7</td> 
    <td align="center">85</td> 
    <td align="center">58<br>0</td> 
    <td align="center">13</td> 

、唯一の動物の名前を与えられ、私はのが4を言わせて、それから、n番目のタグに番号を抽出できるようにしたいと思います。だから "猫"を与えられたら私は32を見つけたいと思っています "犬"、99.そして蛇のために13.文書には何百という動物がいるとします。

答えて

1

structural pseudo selectorsを使用すると、n番目の要素をターゲットにすることができます。

doc.select("td:nth-child(23)"); 

Dogを使用して行を探しているので、最初にその行を選択できます。

Element dogRow = doc.select("tr:has(td:contains(dog))").first(); 

、その後

String cellValue = dogRow.select("td:nth-child(23)").first().ownText(); 

またはそれらを組み合わせ

String cellValue = doc 
    .select("tr:has(td:contains(dog)) > td:nth-child(23)") 
    .first() 
    .ownText(); 

編集

23日子を選択し、私はあなたの質問とsを再読あなたが行の中で犬を見つけて、次にn番目の兄弟を見つけたいと思うような瞳。

あなたはこのためelementSiblingIndexgetElementsByIndexEqualsを使用することができます。

Element dogRow = doc.select("tr:has(td:contains(dog))").first(); 

    int dogCellIndex = dogRow 
     .select("td:contains(dog)") 
     .first() 
     .elementSiblingIndex(); 

    int otherCellIndex = dogCellIndex + 10; 

    String cellValue = dogRow 
     .getElementsByIndexEquals(otherCellIndex) 
     .text(); 
+1

これは、私はあなたに感謝し、必要な正確に何です。 – deterjan

関連する問題