Элемент <xsl:param>
Определяет именованный параметр для использования с элементами <xsl:stylesheet>
или <xsl:template>
. Позволяет задать значение по умолчанию.
<xsl:param
name = QName
select = Expression
</xsl:param>
Атрибуты
- name
Обязательный. Задает имя Полные имена параметра.
- select
Значение атрибута — это Выражения, а значение переменной — это объект, получаемый при вычислении выражения. При использовании этого атрибута элемент<xsl: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:param>
, используется по умолчанию для связывания. При вызове шаблона или таблицы стилей с элементом <xsl:param>
передаются параметры, используемые вместо значений по умолчанию.
Элемент <xsl:param>
должен быть объявлен как прямой дочерний элемент элемента <xsl:template>
. В противном случае значение элемента <xsl:param>
будет недоступно, и произойдет ошибка. Пример:
<xsl:template name="getcount">
<xsl:element name="strong">
<xsl:param name="counted">
<xsl:value-of select="count(//book)"/>
</xsl:param>
Total Book Count: <xsl:value-of select="$counted"/>
</xsl:element>
</xsl:template>
В предыдущем примере единственным прямым дочерним элементом для элемента <xsl:template>
является <strong>
. Поэтому средство синтаксического анализа не может правильно вычислить значение элемента <xsl:param>
и выдаст следующее сообщение об ошибке:
Примечание. |
---|
Здесь нельзя использовать ключевое слово xsl:param. |
Правильно расположить этот элемент, чтобы его можно было вычислить в контексте элемента <xsl:template>
, нужно следующим образом:
<xsl:template name="getcount">
<xsl:param name="counted">
<xsl:value-of select="count(//book)"/>
</xsl:param>
<xsl:element name="strong">
Total Book Count: <xsl:value-of select="$counted"/>
</xsl:element>
Значение параметра может быть объектом любого типа, который может быть возвращен выражением. Элемент <xsl:param>
может определять значение переменной тремя нижеперечисленными альтернативными способами.
Если у элемента есть атрибут
select
, значение этого атрибута должно быть выражением, а значение параметра представляет собой объект, получаемый при вычислении выражения. В этом случае содержимое элемента должно быть пусто.Если элемент не имеет атрибута
select
, а его содержимое непустое (например, имеется несколько дочерних узлов), то содержимое и определяет значение. Содержимым является шаблон, экземпляр которого создается для получения значения параметра. Значение представляет собой фрагмент результирующего дерева, эквивалентный набору узлов, содержащему единственный корневой узел, последовательность дочерних узлов которого порождена в соответствии с шаблоном. Базовый URI-идентификатор узлов фрагмента результирующего дерева является базовым URI-идентификатором элемента.Если элемент последовательности узлов, созданных в соответствии с шаблоном, является атрибутом или пространством имен, возникает ошибка, поскольку корневой узел не может содержать в качестве дочерних узлов атрибуты и пространства имен.
Если содержимое пусто и не имеет атрибута
select
, значением параметра будет пустая строка. Так,<xsl:param name="x"/>
эквивалентно
<xsl:param name="x" select="''"/>
Если параметр используется для выбора узлов в зависимости от их расположения, не следует использовать следующую конструкцию:
<xsl:param name="n">2</xsl:param> ... <xsl:value-of select="item[$n]"/>
При этом будет выведено значение первого элемента, поскольку переменная «n» будет связана с фрагментом результирующего дерева, а не с числом. Вместо этого используйте
<xsl:param name="n" select="2"/> ... <xsl:value-of select="item[$n]"/>
или
<xsl:param name="n">2</xsl:param> ... <xsl:value-of select="item[number($n)]"/>
Далее показан удобный способ задать пустой набор узлов в качестве значения параметра по умолчанию.
<xsl:param name="x" select="/.."/>
Примеры
В этом примере определяется именованный шаблон для числового блока с аргументом, управляющим форматом числа.
XML-файл (catmat.xml)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="paramelem.xsl"?>
<lists>
<ol>
<li>the</li>
<li>cat</li>
<ol>
<li>sat</li>
<li>on</li>
<li>the</li>
</ol>
<li>mat</li>
</ol>
</lists>
XSLT-файл (paramelem.xsl)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="paramelem.xsl"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="ol/li">
<br/>
<xsl:call-template name="numbered-block"/>
</xsl:template>
<xsl:template match="ol//ol/li">
<br/>   
<xsl:call-template name="numbered-block">
<xsl:with-param name="format">a. </xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="numbered-block">
<xsl:param name="format">1. </xsl:param>
<fo:block>
<xsl:number format="{$format}"/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
Вывод
Далее приведен форматированный вывод.
1. the 2. cat a. sat b. on c. the 3. mat
Далее приведен выход обработчика. Пробелы добавлены для наглядности.
<?xml version="1.0" encoding="UTF-16"?>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">1. the</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">2. cat</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">a. sat</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">b. on</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">c. the</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">3. mat</fo:block>
См. также
Справочник
Элемент <xsl:with-param>
Элемент <xsl:variable>
Элемент <xsl:call-template>