【问题标题】:can't get duplicated tags using Jsoup无法使用 Jsoup 获取重复的标签
【发布时间】:2016-01-25 22:09:51
【问题描述】:

我正在使用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>



我需要上面的每个&lt;td&gt; 标签。
所以,我尝试了使用 Elements.selector() 的代码,如下所示:

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



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

<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>



我认为重复的 &lt;td&gt; 标签已被删除...
我不明白。我需要所有的&lt;td&gt; 标签。
我有什么问题吗?

【问题讨论】:

标签: java html parsing jsoup


【解决方案1】:

当您在持有trElements(复数)上调用select("td") 时,似乎会出现问题/错误,但是当您可以在代表单个trElement(单数)上时它会消失。

所以如果你只有一个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 中选择所有td)。

【讨论】:

    【解决方案2】:

    https://blog.tallan.com/2012/07/26/parsing-html-using-jsoup-library/ 是一种获取表所有行的方法:

    Document doc = Jsoup.connect("http://en.wikipedia.org/wiki/List_of_blogs").get();
    

    [...]

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

    table 表示我们要“选择一张桌子”,.意思是'以 CSS 类命名',wikitable 实际上标识了我们正在寻找的 CSS 类, 而 'tr' 的意思是'然后获取所有随后的表格行。'

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      相关资源
      最近更新 更多