Предикаты
При выборе узлов каждый шаг выборки может иметь один или несколько предикатов, которые будут фильтровать выбираемое множество узлов. Предикат — это логическое выражение, вычисляемое для каждого узла выбранного множества, и только в том случае, если результатом является истина, узел остается в фильтруемом множестве.
Cинтаксис предикатов довольно примитивен — это просто выражение, заключенное в квадратные скобки. При вычислении предиката результат этого выражения приводится к булевому типу. Выражения допускается указывать в одном предикате через and или в виде нескольких предикатов.
Вариант 1:
node[aaa=bbb and ccc=ddd]
Вариант 2:
node[aaa=bbb][ccc=ddd]
Чтобы определить названия тегов, по которым вы будете добавлять ограничения, включите вывод XML и изучите структуру данных.
Примеры
-
node[1]
выберет первый в порядке просмотра документа дочерний элемент node контекстного узла; -
node[position() mod 2 = 0]
выберет все четные дочерние элементы node; -
*[. = 'аbc']
выберет все дочерние элементы, текстовое значение которых равно "аbc"; -
*[name() = 'abc']
выберет все дочерние элементы, имя которых равно "аbc"; -
*[starts-with(name(), 'abc')]
выберет все дочерние элементы, имя которых начинается с "аbc"; -
*[. = 'аbc'][1]
выберет первый дочерний элемент, текстовое значение которого равно "аbc"; -
*[. = 'a'][position() mod 2 = 0]
выберет все дочерние элементы, текстовое значение которых равно "аbc", затем из них выберет четные элементы.
Фильтрация множеств
Фильтруемое множество сортируется в направлении просмотра оси навигации данного шага. Для осей ancestor, ancestor-or-self, preceding, preceding-sibling фильтруемое множество сортируется в обратном порядке просмотра документа, для остальных осей — в прямом порядке просмотра.