jSoup:无法正确解析具有相同值的两个连续表格单元格?

时间:2016-01-14 16:51:25

标签: jsoup

我的表格(缩短并格式化以获得更好的可见度):

String htmlStr = 
"<table class="xt">
  <tbody>
   <tr><th class="bg-warning" colspan="3">-</th></tr>
   <tr><th class="bg-warning">2014-08-29</th><td>0</td><td>0.00</td><td>0.00</td></tr>
  </tbody>
</table>"

我的代码:

org.jsoup.nodes.Document doc = Jsoup.parse(htmlStr);
xt = doc.select("table.xt").first();
thCols = xt.select("tr").eq(1).select("th").size();
tdCols = xt.select("tr").eq(1).select("td").size();

结果

System.out.println(thCols); // prints 1
System.out.println(tdCols); // prints 2 - whereas I am expecting 3

为什么会这样?我做了我的搜索 - 但我能找到的最好的是关于jSoup如何期望正确构建的HTML5的评论。但是,上面的表似乎是合规的,除非我错过了一些东西。还有什么可能的原因?

1 个答案:

答案 0 :(得分:1)

这是Jsoup 1.8.2版本中引入的最新Jsoup 1.8.3中的错误。如果切换回1.8.1,它应该按预期工作。另一个解决方案是为tds的数量创建一个单一的选择器:

String htmlStr = ""
        +"<table class=\"xt\">"
        +"  <tbody>"
        +"   <tr><th class=\"bg-warning\" colspan=\"3\">-</th></tr>"
        +"   <tr><th class=\"bg-warning\">2014-08-29</th><td>0</td><td>0.00</td><td>0.00</td></tr>"
        +"  </tbody>"
        +"</table>";
Document doc = Jsoup.parse(htmlStr);
Element xt = doc.select("table.xt").first();
int thCols = xt.select("tr").eq(1).select("th").size();
int tdCols = xt.select("tr").eq(1).select("td").size();
int tdCols2 = xt.select("tr:eq(1)>td").size();

System.out.println(thCols); // prints 1
System.out.println(tdCols); // prints 2 - whereas I am expecting 3
System.out.println(tdCols2); // prints 3 as expected

这可能与描述here

时的错误相同