xsl

Переменные и параметры

Хотя в 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, можно не передавать, т.к. они будут проинициализированы своими значениями, как необязательные параметры у функции.

Подведем итог по переменным:

  • Переменную нельзя поменять. Один раз ее определили, и все, подобно константе в языках программирования.
  • Переменная живет на уровне своего блока, т.е. внутри того элемента, в котором ее определили (например, внутри шаблона).



Добавить комментарий

Ваш e-mail не будет опубликован.