Технология XSLT
Шрифт:
Это преобразование легко понять, если обратиться к рис. 3.18.
Рис. 3.18. Генерация выходящего дерева с использованием переменных
Переменной
Дерево может быть преобразовано в булевое значение, число или строку. Некоторые процессоры позволяют также преобразовывать дерево во множество узлов, которое содержит единственный элемент — корневой узел этого дерева. Такие возможности бывают весьма полезными, но не являются, к сожалению, стандартными в текущей версии языка.
При преобразовании результирующего фрагмента дерева в булевое значение результатом всегда будет true, поскольку дерево никогда не бывает "пустым" — в нем всегда присутствует корневой узел.
При преобразовании дерева в строку результатом является конкатенация (строковое сложение) всех текстовых узлов дерева в порядке просмотра.
Результирующий фрагмент дерева
приводится к строке
При приведении дерева к числу, оно сначала преобразовывается в строку, а затем в число. Это означает, что деревья, в принципе, можно использовать в арифметических операциях, несмотря на то, что они для этого не предназначены.
Таблица преобразования типов
Для удобства использования все взаимные преобразования типов сведены в одну таблицу (табл. 3.2).
Таблица 3.2. Взаимные преобразования типов данных XSLT
Преобразовываемый тип | |||||
---|---|---|---|---|---|
Целевой тип | boolean (булевое значение) | number (число) | string (строка) | node-set (множество узлов) | tree (дерево) |
boolean (булевое значение) | 0 → false NaN → false другое → true | пустая → false непустая → true | пустое → false другое → true | всегда true | |
number (число) | false → 0 true → 1 | разбирается, как число в десятичном формате | мн-во → строка → число | дерево → строка → число | |
string (строка) | false → "false" true → "true" | десятичная запись числа | строковое значение первого узла в порядке просмотра | строковое сложение всех текстовых узлов дерева | |
node-set (множество узлов) | нет | нет | нет | нет | |
tree (дерево) | нет | нет | нет | нет |
Переменные
Несмотря на отсутствие побочных эффектов, которое является одним из основных принципов XSLT, в преобразованиях можно использовать переменные. Переменная определяется как имя, с которым связывается некоторое значение, например:
создаст переменную с именем