Синтаксис Jsoup div[class=] работает, а синтаксис div.class — нет. Почему?

Для следующего фрагмента HTML:

<div class="class_one class_two class_three classfour classfive classsix">
some inner content
</div>

Следующий селектор Jsoup работает:

div[class=class_one class_two class_three classfour classfive classsix]

Но эквивалентный синтаксис div.class не работает:

div.class_one.class_two.class_three.classfour.classfive.classsix

Почему? Что мне не хватает?

РЕДАКТИРОВАНИЕ. Основываясь на отзывах, которые я получил ниже, я понимаю, что мне не удалось объяснить, что означает «не работает». Это произошло из-за того, что я запутался в том, как работает синтаксис мультиклассового выбора. Под «не работает» я имел в виду, что приведенный выше синтаксис .classname выбирает слишком много элементов div, чем синтаксис class=classname (с таким же точным количеством имен классов и в том же порядке!), потому что рассматриваемый HTML содержал дополнительные элементы div с 7-м классом. имя... Оказывается, это предназначено. Это то, чего мне не хватало, и спасибо @Hovercraft Full Of Eels и @BalusC, которые помогли мне обнаружить это.


person ef2011    schedule 26.09.2011    source источник
comment
Это должно сработать. Можете ли вы попробовать это, может быть, только с двумя классами?   -  person Daniel Brockman    schedule 26.09.2011
comment
У вас есть общедоступная веб-страница, которую вы пытаетесь проанализировать, и можете указать здесь ссылку? Можете ли вы также предоставить небольшую компилируемую и работающую программу (sscce), которая демонстрирует вашу проблему?   -  person Hovercraft Full Of Eels    schedule 26.09.2011


Ответы (1)


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

Например, когда я пытаюсь проанализировать этот простой текст:

<html>
 <head></head>
 <body>
  <div class="class_one class_two class_three classfour classfive classsix">
    some inner content 
  </div> 
 </body>
</html>

С этим кодом:

import java.io.IOException;
import java.util.Scanner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class Foo {
   public static void main(String[] args) throws IOException {
      Scanner scan = new Scanner(Foo.class.getResourceAsStream("Foo.txt"));
      String text = "";
      while (scan.hasNextLine()) {
         text += scan.nextLine() + "\n";
      }
      Document doc = Jsoup.parse(text);

      Elements eles = doc.select("div.class_one.class_two.class_three.classfour.classfive.classsix");
      System.out.println(eles);
   }
}

Я получаю этот результат:

<div class="class_one class_two class_three classfour classfive classsix">
  some inner content 
</div>

Предполагается, что использование select должно работать, а если оно не работает, возможно, происходит что-то еще. Возможно, вам лучше всего сделать то, что я только что сделал: опубликовать некоторые данные и некоторый компилируемый исполняемый код (SSCCE) и пусть он покажет, как ваш код не работает.

person Hovercraft Full Of Eels    schedule 26.09.2011
comment
Подсказка: Jsoup также имеет метод parse(), принимающий InputStream. Вы можете использовать его следующим образом: Jsoup.parse(Foo.class.getResourceAsStream("Foo.txt"), "UTF-8", null); - person BalusC; 27.09.2011
comment
@Hovercraft Full Of Eels Спасибо +1 и извините за поздний отзыв. См. РЕДАКТИРОВАТЬ в моем ОП. - person ef2011; 27.09.2011