Наборы узлов
В качестве выражения может использоваться путь адресации. Результатом обработки такого выражения будет набор узлов, отобранных согласно указанному пути адресации.
Оператор | находит объединение операндов, которые должны являться наборами узлов.
Точно так же, как и в случае с путями адресации, для фильтрации выражений могут использоваться . Однако если результатом обработки выражения, подлежащего фильтрации, будет не набор узлов, фиксируется ошибка. Указанный осуществляет фильтрацию набора узлов относительно оси child. Замечание: Значение решающим образом зависит от используемой оси. Например, preceding::foo[1] возвращает первый элемент foo, встретившийся при сканировании документа в обратном порядке, поскольку предикат [1] относится к оси preceding. И наоборот, (preceding::foo)[1] возвращает первый элемент foo, обнаруженный при просмотре документа в прямом порядке, поскольку в этом случае с предикатом [1] связана ось child.
Операторы / и // формируют и выражение, и относительный путь адресации. Если результатом обработки такого выражения окажется не набор узлов, фиксируется ошибка. Оператор / образует композицию в точности так же, как символ /, использовавшийся в пути адресации. Как и в случае с путями адресации, // является сокращением для /descendant-or-self::node()/.
Не существует таких типов объектов, которые можно было бы преобразовать в набор узлов.
[18] UnionExpr ::= | '|' [19] PathExpr ::= | | '/' | '//' [20] FilterExpr ::= |