【发布时间】:2019-06-20 11:15:56
【问题描述】:
对于例子,如果我写
* > a, b, c > d
输出标签是否会联合
* > a
* > b
* > c > d
或联合
* > a > d
* > b > d
* > c > d
如何获得所需的?
基本上我找不到包含所需详细信息的文档。
【问题讨论】:
标签: jsoup combinators
对于例子,如果我写
* > a, b, c > d
输出标签是否会联合
* > a
* > b
* > c > d
或联合
* > a > d
* > b > d
* > c > d
如何获得所需的?
基本上我找不到包含所需详细信息的文档。
【问题讨论】:
标签: jsoup combinators
第一个,但不是真的。更准确地说,输出标签将是:
* > a
b
c > d
我准备了非常简单的 HTML 并在这里进行了测试: https://try.jsoup.org/~D9QmujE_m7rv9G3MahldfKJurfk
这与我在调试 Jsoup 的代码时得到的一致。 org.jsoup.select.QueryParser 将您的查询解析为 3 个评估者:
并且结果将包含与这三个中的任何一个匹配的元素,因此这里看起来像 逗号具有最高优先级并用作 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
【讨论】: