которого указывается имя вызываемого шаблона. Такой вызов не зависит от того, какая часть документа обрабатывается в данный момент и может производиться по необходимости.
Параметры именованному шаблону передаются точно так же, как и обычному — при помощи элементов
xsl:with-param
, которые могут быть включены в вызывающий элемент
xsl:call-template
. Примером вызова именованного шаблона с параметрами может быть конструкция
вида
<xsl:call-template name="foo">
<xsl:with-param name="x" select="1"/>
<xsl:with-param name="y" select="2"/>
</xsl:call-template>
которая вызывает шаблон с именем
foo
и передает ему параметр
x
со значением, равным
1
и параметр
y
со значением, равным
2
.
Вызов именованного шаблона может также производиться при инициализации переменной — внутри элемента xsl:variable. В этом случае с переменной связывается результирующий фрагмент дерева, возвращаемый именованным шаблоном.
Пример
В качестве примера приведем простой шаблон, который вычисляет квадрат переданного ему параметра
x
:
<xsl:template name="sqr">
<xsl:param name="x"/>
<xsl:value-of select="$x * $x"/>
</xsl:template>
Для того чтобы присвоить переменной
у
квадрат числа
6
мы можем записать следующее:
<xsl:variable name="y">
<xsl:call-template name="sqr">
<xsl:with-param name="x" select="6"/>
</xsl:call-template>
</xsl:variable>
Обратим внимание, что значение переменной
y
будет иметь вовсе не численный тип. Несмотря на то, что элемент
<xsl:value-of select="$y"/>
выведет строку "
36
", переменная у содержит не число, а дерево, и
36
лишь является результатом конвертации в строку при выполнении
xsl:value-of
.
Для того чтобы присвоить переменной результат выполнения именованного шаблона в виде булевого значения, строки или числа, следует воспользоваться промежуточной переменной для явного преобразования типов.
будут содержать строковое и численное значение результата вычисления соответственно.
Немного сложнее обстоит дело с булевым типом. При приведении дерева к булевому типу результатом всегда будет "истина", поэтому такое преобразование необходимо выполнить в два шага: сначала преобразовать дерево в число, только затем число в булевый тип.
Пример
В следующем преобразовании шаблон с именем
less-than
сравнивает значения параметров
x
и
y
. Переменной
less-than
присваивается булевое значение результата сравнения.
Листинг 11.7. Вычисление булевого значения функции
Простым примером шаблона-функции может быть шаблон, который форматирует дату в нужном виде, например 7 августа 93 года как "
07-Aug-1993
".
В качестве параметров этот шаблон будет принимать численные значения дня, месяца и года. Год, имеющий значение меньшее 25, мы будем считать принадлежащим новому тысячелетию.