Книга: Технология XSLT
Элемент xsl:param
Разделы на этой странице:
Элемент xsl:param
Синтаксически этот элемент задается как:
<xsl:param
name="имя"
select="выражение">
<!-- Содержимое: шаблон -->
</xsl:param>
Элемент xsl:template
, задающий в преобразовании шаблонное правило, может включать несколько элементов xsl:param
, которые и будут определять параметры этого шаблона. Кроме этого, xsl:param
может указываться в виде элемента верхнего уровня — в этом случае он будет определять глобальный параметр.
Элемент xsl:param
объявляет параметр с именем, которое задается обязательным атрибутом name
. Имя параметра может иметь расширенную форму, например "user:param"
, но чтобы не возиться с пространствами имен, на практике имена всегда дают простые — типа "i"
или "myParam"
.
Параметру может быть присвоено значение по умолчанию — то есть значение, которое будет использоваться в случае, если параметра с таким именем шаблону передано не было. Значение по умолчанию вычисляется следующим образом:
? если в элементе xsl:param
определен атрибут select
, то значением по умолчанию будет результат вычисления выражения, указанного в этом атрибуте;
? если атрибут select
не определен, но сам элемент xsl:param
имеет дочерние узлы, то значением определяемого параметра по умолчанию будет фрагмент дерева, полученного в результате выполнения содержимого xsl:param
;
? если атрибут select
не определен и при этом сам элемент xsl:param
пуст, то значением параметра по умолчанию будет пустая строка.
Примеры
Элемент
<xsl:param name="x" select="2 * 2"/>
создаст параметр, значением которого по умолчанию будет 4
. Точно такой же эффект будет иметь элемент
<xsl:param name="x" select="2 * 2">
<xsl:value-of select="5 * 5/>
</xsl:param>
Его содержимое не будет приниматься в расчет, поскольку в xsl:param
присутствует атрибут select
. Если же убрать атрибут select
:
<xsl:param name="x">
<xsl:value-of select="5 * 5/>
</xsl:param>
то значение параметра x
по умолчанию действительно будет результатом вычисления его содержимого. Однако, вопреки довольно здравому разумению, этим значением не будет число 25
и даже не строка "25
" и тем более не множество, состоящее из текстового узла со значением 25
. Значением параметра x
по умолчанию будет результирующий фрагмент дерева, корень которого будет иметь единственный текстовый узел со значением "25
" (рис. 5.3).
Рис. 5.3. Фрагмент дерева, который будет значением параметра x по умолчанию
Не стоит пугаться такой структуры в качестве значения параметра. То, что параметр x
вдруг будет содержать дерево, ничуть не ограничивает его использование, ведь дерево при потребности может быть приведено к числу или к строке; к множеству узлов же не может быть приведен ни один тип данных.
Предупреждение
Напомним, что при приведении дерева к булевому типу, результатом всегда будет истина. Дерево всегда содержит как минимум корневой узел, и поэтому оно никогда не будет считаться пустым.
Определение параметра вида:
<xsl:param name="x"/>
то есть когда в нем нет ни атрибута select
, ни содержимого, присвоит параметру пустую строку, то есть будет эквивалентно
<xsl:param name="x" select="''"/>
Точно так же, как и в случае с переменными, значение заданного в шаблоне параметра можно использовать в выражениях, добавляя перед именем параметра префикс "$
". К примеру, значение нашего параметра x может быть получено конструкцией вида $x
.
Для того чтобы передать в шаблон определенные значения параметров, элементы, которые вызывают этот шаблон, должны содержать один или несколько элементов xsl:with-param
, который мы рассмотрим чуть ниже. Глобальные параметры, объявленные элементами xsl:param
верхнего уровня, также могут быть переданы преобразованию, однако конкретный механизм реализации этой передачи целиком и полностью зависит от реализации конкретного процессора.
- Глава 12 Документы XSL-FO
- Элементы
- Элемент xsl:number
- Выполнение XSLT-преобразований в Java
- Инструкции XSLT
- Элемент xsl:with-param
- Перенос строк и элементы BR
- Элементы xsl:stylesheet и xsl:transform
- Создание свободно позиционируемых элементов
- 6.4. Рабочий лист Excel и его структурные элементы
- Parameter problem
- Использование отдельных процессоров XSLT