Валиков Алексей Н.
Шрифт:
Преобразовываемый тип | |||||
---|---|---|---|---|---|
Целевой тип | 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, в преобразованиях можно использовать переменные. Переменная определяется как имя, с которым связывается некоторое значение, например:
создаст переменную с именем
Для того чтобы отличать переменные от путей выборки, в выражениях их именам предшествует префикс "
Каждая из переменных имеет собственную область видимости (англ. visibility scope) — область документа преобразования, в которой может быть использовано ее значение. В зависимости от этого переменные могут быть глобальными (видимыми во всем преобразовании) и локальными (видимыми только в своем родительском элементе).
Помимо переменных, в преобразованиях и шаблонных правилах могут также определяться параметры. Принцип их действия полностью совпадает с принципом действия переменных с той лишь разницей, что значения, присваиваемые параметрам, являются значениями по умолчанию и могут быть изменены извне — например, вызывающим шаблонное правило элементом типа
Использование переменных и параметров в XSLT отличается от их использования в привычных процедурных языках программирования типа С++, Java или Object Pascal из-за того, что их значения не могут изменяться. После того, как переменной или параметру присвоено некоторое изначальное значение, оно будет оставаться неизменным.
Это ограничение оказывает значительное влияние на стиль программирования преобразований. В этом смысле XSLT намного ближе к функциональным языкам типа Lisp. Например, в XSLT часто используется рекурсия, которая является одним из основных принципов функционального программирования.
Выражения
Многие из задач, которые, так или иначе, выполняются во время преобразования, связаны с вычислением выражений. Для этих целей в XSLT используется язык XPath, который помимо выбора множеств узлов дерева может также выполнять некоторые основные операции над данными.
Несмотря на то, что XPath является самостоятельным языком, его роль в XSLT настолько велика, что здесь и далее мы будем рассматривать их как единое целое.
Можно выделить четыре основные задачи, для которых в преобразованиях используются выражения:
□ выбор узлов для обработки;
□ описание условий;
□ вычисление строковых значений, которые затем будут использованы в выходящем дереве;
□ вычисление множеств узлов, которые затем будут использованы в выходящем дереве.
Первая из задач непосредственно относится к самому процессу преобразования. Выражения, содержащиеся в атрибутах
В этом шаблонном правиле содержатся два элемента