Элемент <xsl:param>

Определяет именованный параметр для использования с элементами <xsl:stylesheet> или <xsl:template>. Позволяет задать значение по умолчанию.

<xsl:param
  name = QName
  select = Expression
</xsl:param>

Атрибуты

  • имя
    Обязательный. Задает имя Полные имена (XSLT) параметра.

  • select
    Значение атрибута равно Выражения (XSLT), а значение переменной равно объекту, получаемому при вычислении выражения. При использовании этого атрибута элемент <xsl:param> должен быть пустым.

Сведения об элементе

Количество вхождений

Без ограничений

Родительские элементы

xsl:stylesheet, xsl:template, xsl:transform

Дочерние элементы

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/>&#xA0;&#xA0;&#xA0;
   <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>