Jsoup を使用すると、CSS セレクターを介して要素を取得できますdocument.selector("CSS SELECTOR")
。
td
a の直接の子が必要な場合は、直接の子を意味するCSS セレクターtable
を使用できます。あなたの場合、次を使用する必要があります。>
#tableID > tbody > tr > td
これにより、 のすべての第 1 レベルtd
のが取得されます#tableID
table
。注意すべき点:
- 真ん中に入れる必要があります。
> tbody > tr
元の HTML マークアップにそれらがない場合でも、Jsoup は HTML を解析するときにそれらを作成します。
- 最初の部分で ID を取得する必要はありません。あなたは何でも持つことができます。たとえば、クラス:を持つ
td
すべての のすべての最初のレベル。table
.pretty
table.pretty > tbody > tr > td
Jsoup で:
Elements tds = document.select("#tableID > tbody > tr > td");
- または、最初にテーブルを選択する場合 (または以前に選択したことがある場合):
Element myTable = document.select("#tableID")
;
Elements tds = myTable.select(" > tbody > tr > td")
;
最後になりましたが、例TD
から s を取得するサンプルコード:
import org.jsoup.Jsoup;
import org.jsoup.nodes.*;
import org.jsoup.select.*;
public class JsoupHtmlDirectChildren {
public static void main(String[] args) {
String html = "" +
"<html> " +
" <body> " +
" <span>HELLO!</span> " +
" <table id=\"myTable\"> " +
" <tbody> " +
" <tr> " +
" <th>header</th> " +
" <!-- <td> tags on a high level in the hierarchy. --> " +
" <td>high level1 " +
" <table> " +
" <tbody> " +
" <tr> " +
" <!-- <td> tags on a low level in the hierarchy. --> " +
" <td>low level1</td> " +
" <td>low level2</td> " +
" <td>low level3</td> " +
" </tr> " +
" </tbody> " +
" </table> " +
" </td> " +
" <td>high level2</td> " +
" <td>high level3</td> " +
" </tr> " +
" </tbody> " +
" </table> " +
" </body> " +
"</html> ";
Document doc = Jsoup.parse(html);
// all first level children TD of the #myTable table
Elements highLevelTDs = doc.select("#myTable > tbody > tr > td");
System.out.println("QUANTITY FOUND: "+highLevelTDs.size());
for (Element td : highLevelTDs) {
System.out.println("\n\n###HIGH LEVEL TD: "+td);
}
}
}
出力:
QUANTITY FOUND: 3
###HIGH LEVEL TD: <td>high level1
<table>
<tbody>
<tr>
<!-- <td> tags on a low level in the hierarchy. -->
<td>low level1</td>
<td>low level2</td>
<td>low level3</td>
</tr>
</tbody>
</table> </td>
###HIGH LEVEL TD: <td>high level2</td>
###HIGH LEVEL TD: <td>high level3</td>