Java Jsoup如何使jQuery像选择器一样?
我以前使用过jsoup,但我似乎无法理解类似于jquery的选择器是如何定义的。我已经读了源代码,但仍然不明白Java Jsoup如何使jQuery像选择器一样?,java,jsoup,selector,Java,Jsoup,Selector,我以前使用过jsoup,但我似乎无法理解类似于jquery的选择器是如何定义的。我已经读了源代码,但仍然不明白 public static final class ContainsOwnText extends Evaluator { private String searchText; public ContainsOwnText(String searchText) { this.searchText = searchText.toL
public static final class ContainsOwnText extends Evaluator {
private String searchText;
public ContainsOwnText(String searchText) {
this.searchText = searchText.toLowerCase();
}
@Override
public boolean matches(Element root, Element element) {
return (element.ownText().toLowerCase().contains(searchText));
}
@Override
public String toString() {
return String.format(":containsOwn(%s", searchText);
}
}
以上可以这样称呼
select("*:containsOwn("+ str + ")");
问题:
有人能给我解释一下这个机器是怎么工作的吗
为什么上面不是这样
return String.format(":containsOwn(%s)", searchText);
我问这个问题是因为我想了解jsoup是如何工作的,不是因为我很难让它工作。我只是想知道是怎么做到的。如果我想用类似jquery的选择器复制这种行为,并想开发类似的东西,我应该怎么做?当您调用select(query)
时,将解析该查询以填充一组求值器,然后将其传递给收集器以构造满足查询的一组元素
在这种情况下,第162行上的containsOwn
操作导致调用第325行上的containsOwn
方法,从而创建containsOwn
计算器的实例
此计算器被传递给遍历树的,该树调用每个计算器的matches
方法。在这种情况下(在ContainsOwn
中),matches
方法使用java.lang.String
的contains
方法检查给定字符串是否包含在元素的自身文本中
ContainsOwn
中的toString
方法已被编写为镜像用于创建它的语法,并且对它的创建方式没有影响(这由QueryParser处理)。缺少闭合括号看起来像是一个无害的打字错误
return String.format(":containsOwn(%s)", searchText);