jsoup select中组合器的评估顺序

时间:2019-01-27 05:17:05

标签: jsoup combinators

对于示例,如果我写

* > a, b, c > d

输出标签是否为

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

或的联合

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

我如何获得所需的一个?

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

1 个答案:

答案 0 :(得分:1)

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

* > a
b
c > d

我准备了非常简单的HTML并在此处进行了测试: https://try.jsoup.org/~D9QmujE_m7rv9G3MahldfKJurfk

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

  • a:ImmediateParent *
  • b
  • d:ImmediateParentc

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

如果您真的想了解内部结构,可以查看this comment in Jsoup's source,该状态指出大多数组合器为AND,而逗号为OR。不必担心,如果您不了解所有内容(我也不知道),但是它或多或少是很清楚的。

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

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

无论如何,如果您想实现

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

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