jsoup 中组合器的求值顺序 select

Order of evaluation of Combinators in jsoup select

对于例子,如果我写

* > a, b, c > d

输出标签是否为

的并集
* > a
* > b
* > c > d

的并集
* > a > d
* > b > d
* > c > d

如何获得所需的?

基本上我找不到包含所需详细信息的文档。

第一个,但不是真的。更准确地说,输出标签将是以下的并集:

* > a
b
c > d

我准备的很简单HTML,这里测试了一下: https://try.jsoup.org/~D9QmujE_m7rv9G3MahldfKJurfk

这与我在调试 Jsoup 代码时得到的一致。您的查询已被 org.jsoup.select.QueryParser 解析为 3 个评估者:

  • 一个:直系亲属*
  • b
  • d :ImmediateParentc

并且结果将包含与这三个中的任何一个匹配的元素,因此这里看起来 逗号具有最高优先级并且作为 OR.

如果您真的想了解内部结构,可以查看 this comment in Jsoup's source,其中指出大多数组合器是 AND,但逗号是 OR。如果您不完全理解(我也不理解),请不要担心,但它或多或少很清楚。

这也与我打开 html 文件时得到的结果一致,我在浏览器的控制台中使用以下代码在 try.jsoup.org 和 运行 上使用以下代码:

document.querySelectorAll('* > a, b, c > d');

总之,如果你想实现

* > a > d
* > b > d
* > c > d

只需使用选择器:* > a > d, * > b > d, * > c > d 或更短的 a > d, b > d, c > d