Книга: Технология XSLT
Фильтрация
Фильтрация
Множества узлов, которые получаются в результате вычисления выражений, можно фильтровать — то есть выбирать из них узлы, удовлетворяющие заданным свойствам подобно тому, как это делалось предикатами в шагах выборки.
В выражениях множества узлов могут также фильтроваться одним или несколькими предикатами. Узел остается в фильтруемом множестве, только если он удовлетворяет всем предикатам поочередно.
Пример
Предположим, что нам нужно оставить в фильтруемом множестве узлов, которое присвоено переменной nodes
, только те узлы, которые имеют имя а
и атрибут href
. Искомое выражение может быть записано следующим образом:
$nodes[self::а][@href]
Можно использовать и более сложные конструкции, например, фильтровать объединение двух множеств — присвоенного переменной nodes
и возвращаемого путем выборки body/*
:
($nodes|body/*)[self::a][@href]
Выражение, в котором производится фильтрация узлов, отвечает EBNF-правилу FilterExpr
:
[XP20] FilterExpr ::= PrimaryExpr | FilterExpr Predicate
Если раскрыть рекурсию, которая имеется в этом правиле, его можно переписать в более простом виде:
FilterExpr ::= PrimaryExpr Predicate*
Выражение PrimaryExpr
, которое используется в этой продукции, должно обязательным образом возвращать множество узлов. В противном случае процессор выдаст ошибку, потому что никакой другой тип не может быть преобразован во множество узлов.
- Сортировка и фильтрация списка
- 4.10.1. Фильтрация пакетов
- Фильтрация портов
- Фильтрация адресов
- Фильтрация нежелательных адресов
- Фильтрация неверных адресов
- Фильтрация в Linux
- Фильтрация серверов
- Фильтрация сообщений
- Фильтрация нежелательной почты
- Фильтрация записей в таблице
- 8.6. Фильтрация MAC-адресов