Элемент <xsl:variable>
Задает значение, привязанное к выражению.
<xsl:variable
name = QName
select = Expression
</xsl:variable>
Атрибуты
имя
Обязательный. Значение Полные имена (XSLT) переменной.select
Значение атрибута равно Выражения (XSLT), а значение переменной равно объекту, получаемому при вычислении выражения. При указании этого атрибута содержимое <xsl:variable> должно быть пустым.
Сведения об элементе
Количество вхождений |
Без ограничений |
Родительские элементы |
xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:for-each, xsl:if, xsl:otherwise, xsl:param, xsl:processing-instruction, xsl:stylesheetxsl:template, xsl:variable, xsl:when, xsl:with-param, элементы вывода |
Дочерние элементы |
xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:for-each, xsl:if, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, элементы вывода |
Заметки
Значение переменной может быть объектом любого типа, который может быть возвращен выражением. Элемент <xsl:variable> может определять значение переменной тремя нижеперечисленными альтернативными способами.
Если элемент имеет атрибут select, значение атрибута должно быть выражением, а значение переменной является объектом, который представляет собой результат оценки этого выражения. В этом случае содержимое элемента должно быть пустым.
Если элемент не имеет атрибута select, а его содержимое непустое, например имеется несколько дочерних узлов, содержимое и определяет значение. Содержимое представляет собой шаблон, который создается для определения значения переменной. Значение представляет собой фрагмент результирующего дерева, эквивалентный набору узлов, содержащему единственный корневой узел, последовательность дочерних узлов которого порождена в соответствии с шаблоном. Базовый идентификатор URI узлов в фрагменте результирующего дерева является базовым идентификатором URI привязывающегося к переменной элемента.
Если член последовательности узлов, созданных в соответствии с шаблоном, является атрибутом или пространством имен, возникает ошибка, поскольку корневой узел не может содержать в качестве дочерних узлов атрибуты и пространства имен.
Если содержимое пустое и не имеет атрибута select, значение переменной представляет собой пустую строку. Так,
<xsl:variable name="x"/>
эквивалентно
<xsl:variable name="x" select="''"/>
При использовании переменной для выбора узлов по позиции необходимо проявлять осторожность и не выполнять следующих действий.
<xsl:variable name="n">2</xsl:variable> ... <xsl:value-of select="item[$n]"/>
При этом будет выведено значение первого элемента, поскольку переменная n будет связана с фрагментом результирующего дерева, а не числом. Вместо этого необходимо сделать или это:
<xsl:variable name="n" select="2"/> ... <xsl:value-of select="item[$n]"/>
... или это:
<xsl:variable name="n">2</xsl:variable> ... <xsl:value-of select="item[number($n)]"/>