使用JSOUP解析表中的表

时间:2014-02-27 09:51:48

标签: java html jsoup

我试图通过使用jsoup解析HTML来从表中提取一些数据。

这是一个例子,

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 个答案:

答案 0 :(得分:1)

也许使用XML解析器而不是使用HTML解析器(显然不完全支持这种嵌套表)。试试

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