如何使用重复数据创建Jsoup.select.Elements?

时间:2016-01-25 08:01:58

标签: java android jsoup

我有一个网页:

<table id="timetable" class="table gradient-table">
<tbody>
    <tr>
      <td  class="time">
      <div>10:30 12:05</div>
      </td>
      <td  class="time">
      <div>12:30 14:05</div>
      </td>
      <td  class="time">
      <div>12:30 14:05</div>
      </td>
      <td  class="time">
      <div>14:30 16:05</div>
      </td>
      <td  class="time">
      <div>16:30 18:05</div>
      </td>
    </tr>
</tbody>
</table>
我在做:

doc.select("table[id=timetable]").select("tbody").select("td[class=time]");

我应该得到:

10:30 12:05
12:30 14:05
12:30 14:05
14:30 16:05
16:30 18:05
but I got:
10:30 12:05
12:30 14:05
14:30 16:05
16:30 18:05

我做对了吗?

2 个答案:

答案 0 :(得分:3)

您在JSoup 1.8.2&amp ;;中遇到了一个已知的错误。 JSoup 1.8.3。请参阅问题#614#664

为了避免这种情况,你应该尽可能降级到Jsoup版本1.8.1,或者确保不要使用Elements(复数!)类的select方法。单个元素或整个解决方案的CSS选择器似乎没有受到影响,因此您也可以使用@Stephan的解决方案。

答案 1 :(得分:1)

您似乎已经从Jsoup中找到了一个已知问题(有关详细信息,请参阅luksch's answer)。但是,这是一个解决方法Jsoup 1.8.3

table#timetable > tbody > tr > td.time

示例代码

String html = "<table id=\"timetable\" class=\"table gradient-table\">\n<tbody>\n    <tr>\n      <td  class=\"time\">\n      <div>10:30 12:05</div>\n      </td>\n      <td  class=\"time\">\n      <div>12:30 14:05</div>\n      </td>\n      <td  class=\"time\">\n      <div>12:30 14:05</div>\n      </td>\n      <td  class=\"time\">\n      <div>14:30 16:05</div>\n      </td>\n      <td  class=\"time\">\n      <div>16:30 18:05</div>\n      </td>\n    </tr>\n</tbody>\n</table>";

Document doc = Jsoup.parse(html);

for (Element elt : doc.select("table#timetable > tbody > tr > td.time")) {
    System.out.println(elt.text());
}

输出

10:30 12:05
12:30 14:05
12:30 14:05
14:30 16:05
16:30 18:05

在Jsoup 1.8.3上测试