2014-02-27 3 views
0

jsoup를 사용하여 HTML을 구문 분석하여 테이블에서 일부 데이터를 추출하려고합니다. 여기 JSOUP을 사용하여 테이블 내에서 테이블 구문 분석

, 나는 널 포인터 예외가

String tableHtml = 
    "<table> 
      <thead> 
       <tr><th> 
        <table> 
         <tr><td>asdf</td></tr> 
        </table> 
        <table> 
          <tr><td>asdf</td></tr> 
        </table> 
       </th></tr> 
      </thead> 
      <tfoot> 
       <tr><td> 
        THE TEXT I WANT TO GET 
       </td></tr> 
      </tfoot> 
    </table>"; 

Document doc = Jsoup.parseBodyFragment(tableHtml); 
Element table = doc.select("table").first(); 
Element r = table.select("tfoot").first(); // I get NULL here/// WHY??? 
System.out.println("-----------" + r.text()); 

예입니다!

그러나 내부 테이블 중 하나를 제거하면 예외가 발생하지 않고 작동합니다. 또한 <th> 태그를 <td>으로 변경하면 작동합니다. 이상한 행동. 이것은 구문 분석하려고하는 실제 HTML의 예입니다. 누구든지이 예외가 발생하는 이유를 알려 주시면 감사하겠습니다. 고맙습니다.

참고. HTML을 수정할 수 없다고 가정하십시오. 난 그냥 그대로 파싱하고 싶다.

답변

1

HTML 구문 분석기 (이 유형의 중첩 테이블을 완전히 지원하지는 않음) 대신 XML 구문 분석기를 사용하는 것이 좋습니다. 사용해보기

Document doc = Jsoup.parse(tableHtml,"",Parser.xmlParser()); 
Element table = doc.select("table").first(); 
Element r = table.select("tfoot").first(); 
System.out.println("->" + r.text()); 
관련 문제