如何使用重复数据创建 Jsoup.select.Elements?
How to create a Jsoup.select.Elements with duplicate data?
我有一个网页:
<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
我做得对吗?
您似乎遇到了 Jsoup 的一个已知问题(有关详细信息,请参阅 )。但是,这里有一个针对 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 上测试
您在 JSoup 1.8.2 和 JSoup 1.8.3 中发现了一个已知错误。请参阅问题 #614 and #664
为避免这种情况,您应该尽可能降级到 Jsoup 版本 1.8.1,或者确保不使用 Elements(复数!)class 的 select 方法。 CSS select单个元素或整个dolument似乎不受影响,所以你也可以使用@Stephan的解决方案。
我有一个网页:
<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
我做得对吗?
您似乎遇到了 Jsoup 的一个已知问题(有关详细信息,请参阅 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 上测试
您在 JSoup 1.8.2 和 JSoup 1.8.3 中发现了一个已知错误。请参阅问题 #614 and #664
为避免这种情况,您应该尽可能降级到 Jsoup 版本 1.8.1,或者确保不使用 Elements(复数!)class 的 select 方法。 CSS select单个元素或整个dolument似乎不受影响,所以你也可以使用@Stephan的解决方案。