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