последующих узлов, имеющих того же родителя и их потомков. Заметим, что для самого элемента xsl:param эта привязка не видна.

Одна привязка переменной маскирует другую, если она появляется в точке, где вторая привязка была видна и обе они имеют одно и то же имя. Если привязка переменной, задаваемая в шаблоне элементом xsl:variable или xsl:param, маскируется другой привязкой, заданной в том же шаблоне элементом xsl:variable или xsl:param, фиксируется ошибка. Однако если привязка переменной, заданная в шаблоне элементом xsl:variable или xsl:param, маскирует другую привязку, заданную элементом верхнего уровняxsl:variable или xsl:param, ошибка не фиксируется. Таким образом, в следующем примере содержится ошибка:

<xsl:template name='foo'>

<xsl:param name='x' select='1'/>

<xsl:variable name='x' select='2'/>

</xsl:template>

Однако допустим другой вариант:

<xsl:param name='x' select='1'/>

<xsl:template name='foo'>

<xsl:variable name='x' select='2'/>

</xsl:template>

Замечание: В java ближайшим эквивалентом элемента xsl:variable в шаблоне является декларация переменной типа final local с инициализацией. Например,

<xsl:variable name='x' select=''value''/>

имеет семантику, похожую на

final Object x = «value»;

В XSLT нет эквивалента оператору присвоения из Java

x = «value»;

поскольку это затруднило бы реализацию процессора, который бы обрабатывал документ не в пакетном режиме, то есть, последовательно от начала до конца.

11.6 Передача параметров шаблону

<xsl:with-param

name = qname

select = expression >

<!– Content: template ->

</xsl:with-param>

Параметры передаются шаблонам с помощью элемента xsl:with-param. Обязательный атрибут name сообщает название параметра (переменной, значение которой должно быть изменено). Значением атрибута name является QName, процедура приведения которого к расширенному имени описана в главе [2.4 Полные имена]. xsl:with-param можно использовать для xsl:call-template и для xsl:apply-templates. Значение параметра задается точно так же, как для xsl:variable или xsl:param. При обработке значения, заданного элементом xsl:with- param, используются те же текущий узел и текущий набор узлов, что и для элементов xsl:apply-templates или xsl:call-template, в которых этот элемент находится. Если параметр x был передан в шаблон, не имеющий соответствующего элемента xsl:param, ошибка фиксироваться не будет, а сам параметр просто игнорируется.

В данном примере определяется именованный шаблон numbered-block с аргументом, задающий формат числа.

<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:template match='ol//ol/li'>

<xsl:call-template name='numbered-block'>

<xsl:with-param name='format'>a. </xsl:with-param>

</xsl:call-template>

</xsl:template>

12 Дополнительные функции

В данной главе описываются специфичные для XSLT дополнения к основной библиотеке функций XPath. Некоторые из этих дополнительных функций задействуют также информацию, заданную в стиле

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату