Технология XSLT
Шрифт:
В одном атрибуте можно использовать несколько выражений — каждое из них должно быть заключено в фигурные скобки.
Предположим, что мы хотим вывести ссылки на графические изображения в виде иконок. Мы задаем список файлов в виде XML-документа:
Файлы хранятся в каталоге, указанном в атрибуте
Результат будет получен в виде:
Для того чтобы использовать в значении атрибута левые и правые фигурные скобки в качестве простых символов, нужно удваивать их количество, то есть указывать "
Элемент, определенный как
будет преобразован в выходящем документе к виду
Фигурные скобки нельзя использовать рекурсивно для вычисления внутри выражений. К примеру, в качестве значения атрибута
не будет использовано вычисленное значение выражения
Фигурные скобки могут быть спокойно использованы внутри выражения в литералах — в этом случае они не будут задавать значений атрибутов.
Элемент, определенный как
будет преобразован к виду
Шаблоны значений могут быть использованы далеко не везде. К примеру, не могут содержать шаблонов следующие типы атрибутов.
□ Атрибуты, значениями которых являются выражения.
□ Атрибуты, значениями которых являются паттерны.
□ Атрибуты элементов верхнего уровня.
□ Атрибуты пространств имен (
Шаблоны значений могут содержаться в любых атрибутах литеральных элементов, что уже несколько раз было продемонстрировано выше. Например, в литеральном элементе
атрибут
Что же касается атрибутов элементов XSLT, то как очевидно из табл. 4.4, лишь малая их часть может содержать шаблоны значений.
Таблица 4.4. Атрибуты элементов XSLT, которые могут содержать шаблоны значений
Элемент | Атрибуты | Описание |
---|---|---|
xsl:element | name | Имя
|
namespace | Пространство имен создаваемого элемента | |
xsl:attribute | name | Имя создаваемого атрибута |
namespace | Пространство имен создаваемого атрибута | |
xsl:processing-instruction | name | Имя целевого приложения инструкции по обработке |
xsl:number | format | Формат номера |
lang | Языковой контекст номера | |
letter-value | Традиционная или алфавитная буквенная нумерация | |
grouping-separator | Символ-разделитель групп цифр номера | |
grouping-size | Размер группы цифр номера | |
xsl:sort | lang | Языковой контекст сортировки |
data-type | Тип данных сортировки | |
order | Порядок сортировки | |
case-order | Старшинство прописных и строчных символов при сортировке |
Таким образом, перечень параметров, которые могут изменяться динамически (иными словами — вычисляться непосредственно во время выполнения шаблона) не так велик. В частности, стандартными способами в XSLT невозможно выполнить следующее.
□ Вызвать именованный шаблон динамически: атрибут name элемента
□ Динамически изменить режим применения шаблонов (атрибут
□ Вычислить элементами
□ Давать переменным и параметрам имена, вычисляемые во время выполнения преобразования.
Список ограничений подобного рода можно продолжать еще долго, однако общим свойством этих ограничений является то, что шаблоны значений атрибутов могут использоваться при формировании выходящего элемента, но они не оказывают никакого влияния на сам ход выполнения преобразования.
Глава 5
Шаблонные правила
Преобразование как набор правил
В предыдущих главах мы уже упомянули о том, что преобразование в XSLT состоит не из последовательности действий, а из набора шаблонных правил, каждое из которых обрабатывает свою часть XML-документа. Эта глава целиком посвящена вопросам создания и использования шаблонных правил, однако, прежде чем мы приступим к их рассмотрению, хотелось бы пояснить, почему же все-таки правила, а не действия.