无法使用 Jsoup 获取重复的标签

can't get duplicated tags using Jsoup

我正在使用 Jsoup 解析 .html 文件。
我得到了一个 <tr> 标签。

<tr> 标签包含以下内容:

<tr height="40" align="center"> 
    <td class="small" style="padding-top: 5px;" bgcolor="#f1f1f1"><strong>Data1</strong><span class="small1"><br>time1</span></td> 
    <td align="center" class="small">&nbsp;</td> 
    <td align="center" class="small">&nbsp;</td> 
    <td align="center" class="small" bgcolor="#eeeeee" rowspan="2">&nbsp;</td> 
    <td align="center" class="small">&nbsp;</td> 
    <td align="center" class="small">&nbsp;</td> 
    <td align="center" class="small" bgcolor="#eeeeee" rowspan="2">&nbsp;</td> 
    <td align="center" class="small">&nbsp;</td> 
    <td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td> 
</tr>



我需要上面的每个 <td> 标签。
所以,我尝试使用 Elements.selector() 的代码是这样的:

String str;
int size;
// ...
Elements elems;    // it has <tr> tag above.
// ...
str = elems.select("td").toString();
size = elems.select("td").size();



所以我认为现在 size 应该是 9 并且 str 应该具有以下值:

<td class="small" style="padding-top: 5px;" bgcolor="#f1f1f1"><strong>Data1</strong><span class="small1"><br>time1</span></td> 
<td align="center" class="small">&nbsp;</td> 
<td align="center" class="small">&nbsp;</td> 
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2">&nbsp;</td> 
<td align="center" class="small">&nbsp;</td> 
<td align="center" class="small">&nbsp;</td> 
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2">&nbsp;</td> 
<td align="center" class="small">&nbsp;</td> 
<td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td> 



但是,当我编译这段代码时,
size4str 如下所示:

<td class="small" style="padding-top: 5px;" bgcolor="#f1f1f1"><strong>Data1</strong><span class="small1"><br>time1</span></td>
<td align="center" class="small">&nbsp;</td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2">&nbsp;</td>
<td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td>



我认为重复的 <td> 标签已删除...
我不明白。我需要所有 <td> 标签。
我是不是做错了什么?

On https://blog.tallan.com/2012/07/26/parsing-html-using-jsoup-library/ 是一种获取 table:

的所有行的方法
Document doc = Jsoup.connect("http://en.wikipedia.org/wiki/List_of_blogs").get();

[...]

Elements trs = doc.select("table.wikitable tr");

table 表示我们想要‘select a table’, .意思是'with CSS class named',wikitable实际上标识了我们正在寻找的CSS class, 并且“tr”表示“然后获取所有 table 行。”

这里是对大多数 select 的概述: http://jsoup.org/cookbook/extracting-data/selector-syntax

看起来 problem/bug 在 Elements(复数)持有 tr 上调用 select("td") 时出现,但在 Element 上调用 select("td") 时它会消失(单数)表示单个tr

因此,如果您只有一个 tr,您可以简单地选择 first() Elementselect("td")

str = elems.first().select("td").toString();
size = elems.first().select("td").size();

如果有更多 tr

一样遍历所有这些
for (Element tr : elems){
   //^^^^^^^^^^ - element holding single tr
    Elements tds = tr.select("td");
    System.out.println(tds);
    System.out.println("---------");
    System.out.println(tds.size());  
}

当我们调用 select("tr td") 而不是 select("tr").select("td") 时,问题也会消失(在这两种情况下,我们都试图从所有 tr 中 select 所有 td) .