2017-04-01 64 views
0

我想從http://www.espn.com/nba/hollinger/teamstats加載表到JTable。用JSoup解析表後,我設法加載表頭,但是我有加載數據行的問題。首先,我只嘗試了奇數行,但JSoup只加載了最後一個奇數行,我不知道如何加載所有這些行。 我試圖從第一行加載使用。第一(),但只加載第一行,沒有別的。 這裏是我的代碼:如何用JSoup解析後在JTable中存儲完整的HTML表格?

Document doc = null; 
try { 
    doc = Jsoup.connect("http://www.espn.com/nba/hollinger/teamstats").get(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
String [][] data = new String[30][12]; 
String [] header = new String[12]; 
for (Element table : doc.select("table.tablehead .colhead")) { 
    for (Element row : table.select("tr")) { 
     Elements tds = row.select("td"); 
     for (int i=0;i<12;i++) { 
      header[i]=tds.get(i).text(); 
     } 
    } 
} 
for (Element table : doc.select("table.tablehead .oddRow")) { 
    for (int j=0;j<15;j++) { 
     for (Element row : table.select("tr")) { 
      for (int i=0;i<12;i++) { 
       Elements tds = row.select("td"); 
       data[j][i]=tds.get(i).text(); 
      } 
     } 
    } 
} 

的HTML表中有30個數據行,我想他們都加載到我的JTable。 如何修改我的代碼?謝謝您的幫助!

回答

3

它看起來像你ocercomlicating的東西。爲了從標題文本

  • select錶行<tr>保持頭數據
  • 疊代其表的數據<td>
  • 得到他們text()
  • 店它在陣列

對於數據

  • select除了前兩個表之外的所有行,因爲它們用於信息和標題(:gt(1)選擇器在這裏可能有所幫助:gt(n): find elements whose sibling index is greater than n因爲我們想要從索引2,3,4開始獲取tr兄弟,換言之,大於1)
  • 重複你做了什麼信息,但是結果數組店作爲二維String數組的行

代碼:

Document doc = Jsoup.connect("http://www.espn.com/nba/hollinger/teamstats").get(); 

//headers: pick specific row, get its td, convert them to text() store as array 
String[] headers = doc.select("table.tablehead tr.colhead td") 
         .stream() 
         .map(Element::text) 
         .toArray(String[]::new); 

System.out.println(Arrays.toString(headers)); 

//data: select rows with data, convert row to array, hold each row array in 2D array 
String[][] data = doc.select("table.tablehead tr:gt(1)") 
        .stream() 
        .map(row -> row.select("td") 
            .stream() 
            .map(Element::text) 
            .toArray(String[]::new) 
        ).toArray(String[][]::new); 

System.out.println("----"); 
for (String[] row : data){ 
    System.out.println(Arrays.toString(row)); 
}