Хотя в xslt и есть переменные, но это не язык программирования. В нем нет оператора присвоить (=). Т.е. нельзя в какую-то переменную просто засунуть какое-то значение. И если вы уже создали переменную, то поменять ее нельзя.
В итоге: в xslt идет не присваивание значения переменной, а определение переменной со значением. Грубо говоря, можно переменные здесь рассматривать как константы, их нельзя поменять.
Переменные в xslt имеют понятие ‘область видимости’. В обычном программировании все переменные делят на две группы: глобальные (видны везде) и локальные (видны там, где они определены). В xslt каком элементе вы написали переменную, в таком она и действует. Стоит процессору выйти за пределы этого элемента, переменная уничтожается.
Что может быть внутри переменной? Все, что есть в преобразовании. Т.е. переменная может быть любым узлом, набором узлов.
<xsl:variable name="name" select="expression"> <!-- content:template --> </xsl:variable>
У переменной есть имя. Значение переменной определяется двумя способами:
- То, что внутри элемента ‘xsl:variable’.
- Использование в самой переменной select. Тогда переменная наполняется выражением, указанным в select.
Параметры xsl и шаблоны
Синтаксис:
<!-- параметры внутри шаблона --> <xsl:param name="name" select="expression"> <!-- content:template --> </xsl:param> <!-- вызов нужного шаблона с параметрами --> <xsl:call-template name="example"> <xsl:with-param name="title"/> </xsl:call-template>
Параметры в xsl работают с поименованными шаблонами (это шаблоны, которые срабатывают только, если их вызвать). Именованные шаблоны очень похожи на функции и процедуры в программировании. При создании такого шаблона ему задаются параметры, и при вызове шаблона они будут сообщаться нашему шаблону.
Пример:
<!-- создаем именованный шаблон --> <xsl:template name="textBlock"> <xsl:param name="title"/> <xsl:param name="text"/> <xsl:param name="background" select="'#fff'"/> <!-- вызываем параметры шаблона как функции --> <div syle="border-bottom:1px dotted black;backgroung-color:{$background}"> <h5><xsl:value-of select="$title"/></h5> <xsl:value-of select="$text"/> </div> </xsl:template> <!-- обращение к нашему шаблону и его параметрам --> <xsl:template match="book"> <xsl:call-templeta name="textBlock"> <xsl:with-param name="title" select="title"/> <xsl:with-param name="text" select="concat(author,' ',price, 'руб.')"> </xsl:template>
Т.е. мы создали шаблон, определили в нем параметры. Теперь, когда нам надо вызвать этот созданный шаблон, мы используем call-template с параметрами. А в параметрах сообщаем реальные значения, которые надо передать шаблону. Шаблон получает параметры и их выполняет. При этом параметры, которые в шаблоне стоят со своим select, можно не передавать, т.к. они будут проинициализированы своими значениями, как необязательные параметры у функции.
Подведем итог по переменным:
- Переменную нельзя поменять. Один раз ее определили, и все, подобно константе в языках программирования.
- Переменная живет на уровне своего блока, т.е. внутри того элемента, в котором ее определили (например, внутри шаблона).