2017-04-01 6 views
0

테이블을 http://www.espn.com/nba/hollinger/teamstats에서 JTable에로드하려고합니다. JSoup로 테이블을 구문 분석 한 후에 테이블 헤더를로드 할 수 있었지만 데이터 행을로드하는 데 문제가 있습니다. 먼저 홀수 행만 시도했지만 JSoup는 마지막 홀수 행만로드했습니다. 모든 행을로드하는 방법을 모르겠습니다. .first()을 사용하여 첫 번째 행에서로드를 시도했지만 그 다음에는 첫 번째 행만로드했습니다.JSoup로 파싱 한 후 JTable에 전체 HTML 테이블을 저장하는 방법은 무엇입니까?

는 HTML 테이블 (30 개) 데이터 행이
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(); 
      } 
     } 
    } 
} 

, 내 JTable의에 그들 모두를로드 할 : 다음은 내 코드입니다. 내 코드를 수정하는 방법? 도와 주셔서 감사합니다!

답변

3

당신이 흉터를 복잡하게 만드는 것처럼 보입니다. 배열에서 자신의 text()

  • 저장 그것을 얻을의 테이블 데이터 <td>
  • 을 통해

    • select 테이블 행 <tr> 잡고 헤더 데이터
    • 반복 처리를 헤더의 텍스트를 얻으려면 데이터

      를 들어

    • select 정보 및 헤더 (:gt(1) 선택기는 여기에서 유용합니다. :gt(n): find elements whose sibling index is greater than n에 사용되기 때문에 처음 두 개를 제외한 테이블의 모든 행은 인덱스 2,3,4에서 시작하는 tr 형제를 가져 오기 때문에 ... 다른 말로하면 1) 헤더뿐만 2D 문자열 배열의 행으로 배열 저장소를 결과 한 일
    • 반복

    코드 :

    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)); 
    }