Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

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

Область видимости параметров

Область видимости параметров определяется в точности так же, как область видимости переменных. Единственным, на что следует обратить здесь внимание — это то, что элементы

xsl:param
, определяемые в шаблонах, должны всегда быть его первыми дочерними элементами. Поэтому область видимости локальных параметров определяется несколько легче, чем область видимости локальных переменных: после определения параметр может использоваться в том шаблоне где угодно.

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

Элемент xsl:with-param

Синтаксис этого элемента выглядит следующим образом:

<xsl:with-param

 name="имя"

 select="выражение">

 <!-- Содержимое: шаблон -->

</xsl:with-param>

Как можно заметить, элемент

xsl:with-param
абсолютно идентичен элементу
xsl:param
(отличаются только их имена). Практически настолько же похоже и их действие: элемент
xsl:with-param
тоже связывает с именем параметра значение, и при выполнении шаблона это значение будет использоваться вместо значения параметра по умолчанию.

Таким образом, значение параметра, заданного в шаблоне, выбирается в соответствии со следующими положениями:

□ если в элементе, который вызывает этот шаблон, присутствует элемент

xsl:with-param
, передающий значение этого параметра, в шаблоне будет использоваться переданное значение;

□ если в элементе, который вызывает этот шаблон, элемента

xsl:with-param
, с соответствующим именем нет, в качестве значения параметра будет использоваться значение по умолчанию.

Элемент

xsl:with-param
может использоваться только в качестве дочернего элемента
xsl:apply-templates
и
xsl:call-template
.

В качестве простого примера приведем шаблон, который выводит сокращение названия для недели по его номеру. Номер дня передается в шаблон параметром с именем

day-number
.

Листинг 5.26. Вывод названия дня недели по номеру

<xsl:template name="day-name">

 <xsl:param name="day-number" select="0"/>

  • Читать дальше
  • 1
  • ...
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: