有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有没有办法在一个Jsoup select中获得多个元素的深度?

我正在查看一个通用的HTML表,其中包含一些需要提取的值

该表的一个示例如下所示:

<table width="100%" class="list"> 
 <tbody>
  <tr> 
   <td><font style="font-family:Verdana; color:black; font-size:8pt; "><label>Project Number</label></font></td> 
   <td><font style="font-family:Verdana; color:black; font-size:8pt; ">123456</font> </td> 
  </tr> 
  <tr height="22"> 
   <td><font style="font-family:Verdana; color:black; font-size:8pt; "><label>Report Number</label></font></td> 
   <td><font style="font-family:Verdana; color:black; font-size:8pt; ">REP445566</font></td> 
  </tr> 
</table>

我想做的是从第二个<td>标记中取出值。我不想为表做一个元素,然后为<tr>标记做另一个元素,为<td>做另一个元素,然后为<font>做另一个元素。我很好奇是否有办法选择“tr>;td>;font”这样的东西,这样我就不必创建多个元素来深入了解字体的值

到目前为止,我得到的是:

Elements listTables = doc.getElementsByClass("list");

// There is a table above the one I want to use
Element mainTable = listTables.get(1);

Elements trs = mainTable.select("tr");

for (Element tr : trs) {
    Elements tds = tr.select("td");

    Element label = tds.get(0);

    if (tds.size() > 1) {
        Element value = tds.get(1);
        // This gets me the td, now I need the value of the font
    }


}

共 (2) 个答案

  1. # 1 楼答案

    当然,Jsoup非常强大!试试这个

    String tdPath = "table > tbody > tr > td:nth-child(2)";
    Elements secondTd = doc.select(tdPath);
    
  2. # 2 楼答案

    您需要使用css选择器查询:

    Elements e = d.select("table.list > tbody > tr > td + td");
    for(int i=0;i<e.size();i++)
    System.out.println(e.get(i).text());
    

    输出:

    123456
    REP445566