2012-06-10 39 views
0

如何提取使用jsoup直接具有兩個「td」標籤的「tr」標籤。如何解析嵌套表usin jsoup

樣本HTML

<table> 
    <tr> <!-- I don't want to extract this tr --> 
    <td> 
     <table> 
     <tr><td>extract</td><td>extract</td></tr> <!-- I want extact this tr --> 
     <tr><td>extract</td><td>extract</td></tr> <!-- I want extact this tr --> 
     </table>  
    </td> 
    </tr> 
</table> 

我嘗試使用此查詢來提取。但我有3個tr標籤。

doc.select("tr:has(td:eq(1))") 

回答

2

您是否試過以下查詢doc.select("tr tr")

此查詢應選擇您評論的所有表格行。

+0

是的,我有。我想直接提取具有2個td的tr。我不想提取2nd tr。 – jazzlivetokyo

+0

好吧,現在我明白你的問題;)對不起,但我不認爲,像jsoup選擇器中的正則表達式的前瞻是可能的。所以很容易選擇td元素,但是我發現沒有選擇器返回這個結果的父元素。因此,似乎唯一可能的解決方案是通過結果的api選擇父項。 –

+0

謝謝。我曾嘗試過下面的代碼,但我有3個tr標籤。所以我會要求一個像「hasOwn」這樣的新功能。 – jazzlivetokyo

1

//我希望這會幫助你........你可以看到類似這樣的輸出:a b c d/n e f g h存儲在內表的td標籤中。

 String input = "<table><tr><td >TD1</td><td>td1</td> <td ><table><tr><td >a</td><td>b</td> <td >c</td><td>d</td></tr><tr><td>e</td><td>f</td><td >g</td><td>h</td></tr></table></td><td>td1</td></tr><tr><td>TD2</td><td>tD2</td><td >Td2</td><td>td2</td></tr></table>"; 

    Document doc = Jsoup.parse(input); 

    Elements tables = doc.select("table tr td:has(table)"); 

    for (Element table : tables) { 

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

     String[][] trtd = new String[trs.size()][]; 

     for (int a = 0; a < trs.size(); a++) { 

      Elements tds = trs.get(a).select("td"); 

      trtd[a] = new String[tds.size()]; 

      for (int b = 0; b < tds.size(); b++) { 

       trtd[a][b] = tds.get(b).text(); 

       System.out.print(trtd[a][b] +" "); 

      } 
      System.out.println(); 
     } 

     // trtd now contains the desired array for this table 
    } 
} 

}

+0

歡迎並感謝您的額外答覆!但是考慮解釋代碼的作用(可能通過內聯註釋)以及它如何解決問題。 – Djizeus

+0

也可以使用doc.select(「td:has(table)」)。它只選擇包含表格標籤的td標籤,它可以提取選定表格的td標籤的值並將其存儲在數組中。每行輸出除以「/ n」。我認爲它可以直接解決問題所需的問題...... –