2013-12-11 4 views
0

Я разборе некоторые таблицы с веб-сайта, а именно я пытаюсь извлечь следующие клетки от имени класса:Jsoup: Выбор элементов, которые имеют один класс

<td class=" text_bold">example</td> 

я использую стандартный селектор Jsoup для извлечения теги с классом, следующим образом:

Elements cells = doc.select("td.text_bold"); 

проблема заключается в том, что существует и другие клетки, которые также выбраны потому, что они имеют как text_bold класса и другой класс, например:

<td class="text_bold text_align_left" valign="top" width="150">example</td> 

Есть ли простой способ фильтрации только элементов, которые имеют один класс, как указано в методе select()?

+1

Попробуйте 'doc.select ("тд [класс = 'text_bold']")'. – Vulcan

+0

@ Vulcan Спасибо за предложение. Похоже, что он должен работать с '[attribute = value]', но он возвращает 0 элементов. – ashatte

+1

Есть ли место до или после 'text_bold', но все еще в объявлении класса? Если это так, вы можете использовать '^ =' для startsWith, '$ =' для endsWith или если пробелы находятся с обеих сторон и/или являются несогласованными, используйте селектор регулярных выражений '~ ='. – Vulcan

ответ

2

Я раньше падал в этой ситуации. Однако трюк я использовал в том, что:

  • первый взять все элементы как Elements с целевым классом: для контекста "text_bold"
  • Затем пройти каждый элемент сравнения их имя класса, который может быть получен с помощью Element.className() функции. Если имя класса равно "aClass bClass", эта функция вернет его как одно имя класса.

Например:

Document doc = Jsoup.parse("<td class=\"text_bold text_align_left\" valign=\"top\" width=\"150\">example</td> 
<td class=\" text_bold\">example</td>"); 
     Elements elms = doc.select("td.text_bold"); 
     for(Element e:elms) 
      if(e.className().trim().equals("text_bold")) 
          //^^^<--trim is required as, 
          // their can be leading and trailing space 
      { 
       System.out.println(e.className()); 
       // do my thing 

      } 
+0

Спасибо, отличное решение. – ashatte

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