首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联合多个评估器

联合多个评估器
EN

Stack Overflow用户
提问于 2021-03-25 14:54:00
回答 1查看 190关注 0票数 2

我有这样的代码:

代码语言:javascript
复制
Document dom = Jsoup.parse(htmlString);

Evaluator aTag = new Evaluator.Tag("a");
Evaluator linkClass = new Evaluator.Class("foo");
Evaluator hrefContains = new Evaluator.AttributeWithValueContaining("href", "abc");

我知道如何使用一个评估器

代码语言:javascript
复制
dom.selectFirst(aLinkClass);

但是我想从dom中获得第一个元素,它匹配所有3个Evaluator

如何在同一个选择中应用多个Evaluator

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-25 22:27:25

您可以使用select方法,该方法在将计算程序解析为string并将其加入字符串之后接受字符串,对and链接不使用分隔符,对于or链接使用逗号作为分隔符。示例:

代码语言:javascript
复制
Evaluator aTag         = new Evaluator.Tag("a");
Evaluator linkClass    = new Evaluator.Class("foo");
Evaluator hrefContains = new Evaluator.AttributeWithValueContaining("href", "abc");
    
String all_AND = String.join("",  aTag.toString(), linkClass.toString(), hrefContains.toString());
String all_OR  = String.join(",", aTag.toString(), linkClass.toString(), hrefContains.toString());
    
System.out.println(doc.selectFirst(all_AND).text());

或者,您可以从文档中获取所有细节,并使用例如for循环或流在java端进行过滤:

代码语言:javascript
复制
Evaluator all = new Evaluator.AllElements();
Optional<Element> target = doc.select(all)
                                .stream()
                                .filter(e -> e.is(aTag))
                                .filter(e -> e.is(linkClass))
                                .filter(e -> e.is(hrefContains))
                                .findFirst();
target.ifPresent(System.out::println);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66802073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档