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

为什么?我错过了什么?

EDIT:根据我收到的以下反馈,我意识到我没有解释清楚"不工作"是什么意思。这是由于我对多类选择语法的工作方式感到困惑。所谓"不工作",我的意思是上面的.classname语法比class=classname语法选择了太多的div(具有相同数量的类名和相同的顺序!),因为有问题的HTML包含带有第7个类名的额外div…事实证明这是设计好的。这就是我所缺少的,感谢@气垫船充满鳗鱼和@BalusC帮助我发现了这一点。

再一次,根据我的评论,你需要在上下文中向我们展示你的代码,以显示它是如何不工作的。

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

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

最新更新