对于以下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帮助我发现这一点。
答案 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)并让它显示你的代码是如何工作的。