XSL змінні та параметри (xsl variable та xsl param)
XSLT дозволяє використовувати в стилі змінні. Змінні XSLT досить сильно відрізняються від змінних в інших мовах програмування. Строго кажучи, змінні XSLT не є змінними в тому сенсі, що їх значення не можна змінити. Вони більше схожі на константи у багатьох мовах програмування.
Синтаксис:
Як видно, синтаксис цих елементів абсолютно однаковий.
Атрибути:
- name - обов'язковий атрибут, задає ім'я змінної. Надалі використовувати значення, присвоєне змінної, можна вказавши перед ім'ям змінної символ $ (наприклад, для змінної name $name ). Ім'я змінної відповідає правилу розширених імен, тобто. воно може мати вигляд name або prefix: name. Слід врахувати, що якщо префікс вказаний, звернутися до змінної надалі можна буде також тільки за префіксом та ім'ям (природно із символом $ на початку).
- select - необов'язковий атрибут, задає вираз, значення якого надається змінною. Якщо атрибут select не визначений, але при цьому елемент xsl:variable або xsl:param містить дочірні інструкції та фіксовані кінцеві елементи, значенням змінної буде так званий фрагмент кінцевого дерева, отриманий в результаті виконання вмісту xsl:variable або xsl:param . Якщо ж атрибут select не визначений, і сам елемент xsl:variable або xsl:param не містить жодних інструкцій та фіксованих кінцевих елементів, то змінною зміною буде порожній рядок. Слід також зазначити, що атрибут select має пріоритет над вмістом елемента xsl:variable або xsl:param: якщо одночасно визначено атрибут select і елемент xsl:variable або xsl:param містить інші інструкціїі фіксовані кінцеві елементи, то перевага буде віддана атрибуту select , і змінної буде присвоєно значення виразу, що міститься в ньому. Інструкції та фіксовані кінцеві елементи, що містяться в xsl:variable або xsl:param, у цьому випадку будуть проігноровані.
Область видимості змінних
Як зазначалося вище, змінні (як і параметри) може бути глобальними і локальними. Глобальні змінні оголошуються елементами верхнього рівня xsl:variable та xsl:param. Локальні змінні оголошуються інструкціями xsl:variable та xsl:param (тобто оголошуються всередині шаблону). Локальні і глобальні змінні мають різну область видимості.
Змінна, як глобальна, і локальна, має визначатися через саму себе – явно чи неявно.
Не можна двічі визначати змінну з тим самим ім'ям. Однак із цього правила є винятки:
- імена глобальних змінних можуть збігатися лише у тому випадку, якщо вони мають різний пріоритет імпорту. У цьому випадку змінна матиме значення, яке задано елементом xsl:variable зі старшим пріоритетом імпорту;
- допускається збіг імен глобальної та локальної змінної. У цьому випадку в області видимості локальної змінної використовуватиметься локальне значення, а в області видимості глобальної (за винятком локальної видимості) – глобальне значення. Тобто локальна змінна хіба що перекриває значення глобальної у сфері видимості;
- імена локальних змінних можуть збігатися лише в тому випадку, якщо їхні області видимості не перетинаються.
Параметри XSLT практично повністю ідентичні змінним. Все, що говорилося вище про змінні, повністю застосовується до параметрів. Основна відмінність полягає втому, що значення, надане параметру при ініціалізації, є значенням за замовчуванням і може бути перевизначено при виклику.
Для надсилання шаблону нового значення параметра інструкція виклику шаблону повинна містити елемент xsl:with-param . Синтаксис цього елемента повністю ідентичний синтаксису елемента xsl:param: