Предикаты

При выборе узлов каждый шаг выборки может иметь один или несколько предикатов, которые будут фильтровать выбираемое множество узлов. Предикат — это логическое выражение, вычисляемое для каждого узла выбранного множества, и только в том случае, если результатом является истина, узел остается в фильтруемом множестве.

Cинтаксис предикатов довольно примитивен — это просто выражение, заключенное в квадратные скобки. При вычислении предиката результат этого выражения приводится к булевому типу. Выражения допускается указывать в одном предикате через and или в виде нескольких предикатов.

Вариант 1:

node[aaa=bbb and ccc=ddd]

Вариант 2:

node[aaa=bbb][ccc=ddd]

Чтобы определить названия тегов, по которым вы будете добавлять ограничения, включите вывод XML и изучите структуру данных.

Примеры

  1. node[1]
    выберет первый в порядке просмотра документа дочерний элемент node контекстного узла;
  2. node[position() mod 2 = 0]
    выберет все четные дочерние элементы node;
  3. *[. = 'аbc']
    выберет все дочерние элементы, текстовое значение которых равно "аbc";
  4. *[name() = 'abc']
    выберет все дочерние элементы, имя которых равно "аbc";
  5. *[starts-with(name(), 'abc')]
    выберет все дочерние элементы, имя которых начинается с "аbc";
  6. *[. = 'аbc'][1]
    выберет первый дочерний элемент, текстовое значение которого равно "аbc";
  7. *[. = 'a'][position() mod 2 = 0]
    выберет все дочерние элементы, текстовое значение которых равно "аbc", затем из них выберет четные элементы.

Фильтрация множеств

Фильтруемое множество сортируется в направлении просмотра оси навигации данного шага. Для осей ancestor, ancestor-or-self, preceding, preceding-sibling фильтруемое множество сортируется в обратном порядке просмотра документа, для остальных осей — в прямом порядке просмотра.

Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.