2016-01-24 1 views
0

Я разбираю .html файл с помощью Jsoup.
И у меня есть тег <tr>.

Этот <tr> тег имеет следующее содержание:
не удается получить дублированные теги с использованием Jsoup

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



Но, когда я скомпилировал этот код,
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">&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>.
Я что-то не так?

+0

Это похоже на общую проблему, см. Эту тему [http://stackoverflow.com/questions/32040601/jsoup-elements-removes-duplicates-automatically](http://stackoverflow.com/questions/32040601/ jsoup-elements-remove-duplicates-автоматически) –

+0

@ralfhtp Спасибо за ваш комментарий. Поэтому я должен понизить версию 'Jsoup' до' 1.7' или дождаться новой версии ... Спасибо – Chris

+0

См. Также: http://stackoverflow.com/q/34987678/363573 – Stephan

ответ

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

+0

Спасибо. Работает – Chris

0

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 мы ищем,и «тр» означает ', а затем получить все строки таблицы, которые следуют.

здесь обзор по большей селекторы: http://jsoup.org/cookbook/extracting-data/selector-syntax

Смежные вопросы