Xpath объяснение - PullRequest
       3

Xpath объяснение

2 голосов
/ 10 января 2020

Здравствуйте, я хочу спросить, что именно делает этот Xpath, если мы используем.

Я понимаю, что он выбирает все узлы b, которые появляются перед текущим узлом и которые не совпадают с текущим узлом.

//b[not(preceding::*=.)]

Итак, если xml имеет вид:

<a>
 <b>English</b>
 <b>German</b>
 <b>Italian</b>
 <b>Belarusian</b>
 <b>Russian</b>
 <b>Bulgarian</b>
 <b>French</b>
 <b>English</b>
</a>

Сохраняет ли это последнее вхождение узла или первое? это то, что я не понимаю.

Я думал, что он должен сохранять последнее, но используя этот xpath в функции FILTER XML, я даю результат сохранения первого вхождения, поэтому результат был

{"Engli sh ";" Немецкий ";" итальянский ";" белорусский ";" русский ";" болгарский ";" французский "}

Может кто-нибудь объяснить?

Ответы [ 2 ]

2 голосов
/ 10 января 2020

Этот XPath,

//b[not(preceding::*=.)]

выбирает все b элементы, у которых нет предшествующего элемента с таким же строковым значением .

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

Примечания:

  1. Чтобы ограничить область действия предыдущими b элементами, используйте //b[not(preceding::b=.)].
  2. Чтобы ограничить область действия предыдущими b родственными элементами , используйте //b[not(preceding-sibling::b=.)]
0 голосов
/ 10 января 2020

Это означает «выбрать все b узлы, для которых не существует предыдущего узла, равного контрольному узлу». Следовательно, сохранение первого и отклонение последнего - правильное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...