Технология XSLT
Шрифт:
Другой иллюстрацией этому же случаю использования переменной может быть следующая ситуация: в некоторых случаях выражения могут быть просты для вычисления, но слишком громоздки для записи. Гораздо элегантней один раз вычислить это громоздкое выражение, сохранить его в переменной и затем обращаться по короткому имени. Например, следующий элемент
После
Второй типовой случай использования переменных также заметно облегчает создание выходящего дерева, делая этот процесс гибким и легко конфигурируемым. Примером формирования HTML-документа при помощи такого подхода может быть следующий шаблон:
Достоинство этого подхода в том, что переменные, содержащие фрагменты деревьев как бы становятся модулями, блоками, из которых в итоге собирается результирующий документ.
Более практичным применением возможности переменных содержать фрагменты деревьев является условное присвоение переменной значения. Представим себе следующий алгоритм:
Для процедурного языка с изменяемыми переменными это не проблема. На Java такой код выглядел бы элементарно:
или чуть в более длинном варианте:
Однако если бы в XSLT мы написали что-нибудь наподобие:
то
Конечно, это не точно то же самое — на самом деле мы получаем не значение, а дерево, содержащее это значение, но для строковых и численных значений особой разницы нет: дерево будет вести себя точно так же, как число или строка. Для булевых значений и множеств узлов приходится изыскивать другие методы. Булевое значение можно выразить через условие, например:
Для множества узлов можно использовать предикаты и операции над множествами:
Заметим, что шаблон, содержащийся в элементе
Использование внешних документов в преобразовании, как правило, сопровождается громоздкими выражениями вида:
и так далее.
Месть бывшему. Замуж за босса
3. Власть. Страсть. Любовь
Любовные романы:
современные любовные романы
рейтинг книги
Кодекс Крови. Книга IV
4. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Солнечный корт
4. Все ради игры
Фантастика:
зарубежная фантастика
рейтинг книги
Темный Лекарь 4
4. Темный Лекарь
Фантастика:
фэнтези
аниме
рейтинг книги
Таня Гроттер и Исчезающий Этаж
2. Таня Гроттер
Фантастика:
фэнтези
рейтинг книги
Прометей: каменный век II
2. Прометей
Фантастика:
альтернативная история
рейтинг книги
Камень. Книга восьмая
8. Камень
Фантастика:
фэнтези
боевая фантастика
рейтинг книги
Кодекс Крови. Книга ХVI
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Кодекс Охотника. Книга XV
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
рейтинг книги
Последняя Арена 11
11. Последняя Арена
Фантастика:
фэнтези
боевая фантастика
рпг
рейтинг книги
Хорошая девочка
Любовные романы:
современные любовные романы
эро литература
рейтинг книги
Диверсант. Дилогия
Фантастика:
альтернативная история
рейтинг книги
