gpt4 book ai didi

java - Jsoup 如何让 jQuery 变得像选择器?

转载 作者:行者123 更新时间:2023-11-30 04:19:55 24 4
gpt4 key购买 nike

我过去使用过jsoup,但我似乎无法理解类似jquery的选择器是如何定义的。我看了源码还是看不懂。

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 + ")");

Here is the select

问题:

有人可以向我解释一下 ContainsOwn 是如何工作的吗?


return String.format(":containsOwn(%s", searchText);

为什么上面不是这样呢?

return String.format(":containsOwn(%s)", searchText);

And here is the evaluator

我问这个问题是因为我想了解 jsoup 是如何工作的,并不是我在使它工作时遇到了麻烦。我只是想知道它是如何完成的。如果我想用类似 jquery 的选择器复制这种行为,并想开发类似的东西,我应该做什么?

最佳答案

当您调用 select(query) 时,该查询将被解析以填充一组求值器,然后将这些求值器传递给收集器以构造一组满足查询的元素。

在本例中 QueryParser第 162 行的 containsOwn 操作导致调用第 325 行的 contains 方法,该方法创建 ContainsOwn 求值器的实例。

该评估器被传递到 Collector调用每个评估器的 matches 方法来遍历树。在本例中(在 ContainsOwn 中),matches 方法使用 java.lang.Stringcontains 方法来检查如果给定的字符串包含在元素自己的文本中。

ContainsOwn 中的 toString 方法已编写为镜像用于创建它的语法,并且对其创建方式没有影响(这是由 QueryParser 处理的) )。缺少右括号看起来像是一个无害的拼写错误。

关于java - Jsoup 如何让 jQuery 变得像选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17335386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com