Порядок оценки комбинаторов в jsoup select - PullRequest
0 голосов
/ 27 января 2019

Для пример , если я напишу

* > a, b, c > d

Будут ли выходные теги объединяться

* > a
* > b
* > c > d

ИЛИ объединяться

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

Как получить нужный?

По сути, я не смог найти документ, содержащий необходимые данные.

1 Ответ

0 голосов
/ 28 января 2019

Первый, но не совсем. Точнее, выходные теги будут объединением:

* > a
b
c > d

Я подготовил очень простой HTML и протестировал его здесь: https://try.jsoup.org/~D9QmujE_m7rv9G3MahldfKJurfk

Это соответствует тому, что я получил при отладке кода Jsoup. Ваш запрос был проанализирован org.jsoup.select.QueryParser на 3 оценщика:

  • a: ImmediateParent *
  • б
  • d: ImmediateParentc

, и результат будет содержать элементы, соответствующие любому из этих трех, поэтому здесь похоже, что запятые имеют самый высокий приоритет и работают как ИЛИ .

Если вы действительно хотите знать внутренности, вы можете взглянуть на этот комментарий в источнике Jsoup , в котором говорится, что большинство комбинаторов - это И, а запятая - ИЛИ. Не волнуйтесь, если вы не понимаете всего этого (как и я), но это более или менее ясно.

Это также согласуется с результатами, полученными при открытии 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

...