Jsoup div [class =] работает, а div.class - почему? - PullRequest
3 голосов
/ 26 сентября 2011

Для следующего фрагмента 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 не делает't работа:

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

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

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

1 Ответ

4 голосов
/ 27 сентября 2011

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

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

<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 ) и показать, как ваш код не работает.

...