При выборе узлов каждый шаг выборки может иметь один или несколько предикатов, которые будут фильтровать выбираемое множество узлов. Предикат — это логическое выражение, вычисляемое для каждого узла выбранного множества, и только в том случае, если результатом является истина, узел остается в фильтруемом множестве.
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 фильтруемое множество сортируется в обратном порядке просмотра документа, для остальных осей — в прямом порядке просмотра.