Jsoup div [class =]语法有效,而div.class语法没有 - 为什么?

时间:2011-09-26 19:15:06

标签: java html-parsing jsoup

对于以下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语法选择了比class=classname语法(具有相同的类名和相同顺序!)的div太多的div,因为HTML in问题包含额外的具有第7类名称的div ...事实证明这是by design。这就是我所缺少的,感谢@Hovercraft Full Of Eels和@BalusC帮助我发现这一点。

1 个答案:

答案 0 :(得分:4)

同样,根据我的评论,您需要在上下文中向我们展示您的代码,以显示它是如何工作的。

例如,当我尝试分析这个简单的文本时:

<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)并让它显示你的代码是如何工作的。