我正在使用.html
解析Jsoup
文件。
我有一个<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"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </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"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td>
但是,当我编译这段代码时,
size
为4
,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"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td>
我认为删除了重复的<td>
代码...
我不明白。我需要所有<td>
个标签。
我有什么不对吗?
答案 0 :(得分:1)
当您在select("td")
(复数)上Elements
暂停tr
时,会出现问题/错误,但当您可以Element
(单数)时,它会消失代表单tr
。
因此,如果您只有一个tr
,则只需选择first()
Element
和select("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")
时,问题也会消失(在这两种情况下,我们都会尝试从所有td
中选择所有tr
)。
答案 1 :(得分:0)
On 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");
表意味着我们要“选择一个表”,。表示'使用CSS类命名',wikitable实际上标识了我们正在寻找的CSS类, 和'tr'表示'然后获取后面的所有表行。'
这里是大多数选择器的概述: http://jsoup.org/cookbook/extracting-data/selector-syntax