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
对于例子,如果我写
* > 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