Jsoup 允许您通过 CSS 选择器获取元素document.selector("CSS SELECTOR")
。
如果你想要td
a 的直接子代,table
你可以使用CSS 选择器>
,这意味着直接子代。那么,对于您的情况,您应该使用:
#tableID > tbody > tr > td
这将为您td
提供#tableID
table
. 需要注意的一些事项:
- 你必须包括
> tbody > tr
在中间。即使您的原始 HTML 标记没有它们,Jsoup 也会在解析 HTML 时创建它们。
- 你不需要在第一部分有一个 ID。你可以拥有任何东西。例如,所有具有 class :
td
的 s 的所有第一级 s 。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>