我有这样的代码:
Document dom = Jsoup.parse(htmlString);
Evaluator aTag = new Evaluator.Tag("a");
Evaluator linkClass = new Evaluator.Class("foo");
Evaluator hrefContains = new Evaluator.AttributeWithValueContaining("href", "abc");我知道如何使用一个评估器
dom.selectFirst(aLinkClass);但是我想从dom中获得第一个元素,它匹配所有3个Evaluator。
如何在同一个选择中应用多个Evaluator?
发布于 2021-03-25 22:27:25
您可以使用select方法,该方法在将计算程序解析为string并将其加入字符串之后接受字符串,对and链接不使用分隔符,对于or链接使用逗号作为分隔符。示例:
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端进行过滤:
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);https://stackoverflow.com/questions/66802073
复制相似问题