The Planets Table
</H1>
<BR>
<HR>
<BR>
<HR>
<TABLE BORDER='2'>
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<TR>
<TD>Mercury</TD>
<TD>.0553 (Earth = 1)</TD>
<TD>1516 miles</TD>
<TD>58.65 days</TD>
</TR>
<TR>
<TD>Venus</TD>
<TD>.815 (Earth = 1)</TD>
<TD>3716 miles</TD>
<TD>116.75 days</TD>
</TR>
<TR>
<TD>Earth</TD>
<TD>1 (Earth = 1)</TD>
<TD>2107 miles</TD>
<TD>1 days</TD>
</TR>
</TABLE>
<BR>
<HR>
<BR>
<HR>
</BODY>
</HTML>
Результирующий документ показан на рис. 9.1.

Рис. 9.1. Вызов именованного шаблона
Таким образом, вы можете обращаться к элементу буквального результата по имени, легко помещая его в результирующий документ. Но это слишком статично — элемент буквального результата всегда один и тот же. Впрочем, как можно заметить, вызов именованного шаблона во многом похож на вызов подпрограммы в языке программирования. Так же, как вы передаете данные в подпрограмму, вы можете передать данные в именованные шаблоны при помощи
Элементы <xsl:param> и <xsl:with-param>: создание параметров
Параметры во многом похожи на переменные — за тем исключением, что они обычно используются вместе с именованными шаблонами. Параметры позволяют вам передать в шаблон какие-то значения. Параметры создаются элементом <xsl:param>
, обладающим двумя атрибутами:
• name
(обязательный). Имя переменной, устанавливается в QName;
• select
(необязательный). Значение параметра по умолчанию. Устанавливается в выражение XPath.
Аналогично <xsl:variable>
, этот элемент может либо быть элементом высокого уровня, либо применяться внутри тела шаблона. Параметры, созданные элементами <xsl:param>
, являются глобальными, а созданные внутри шаблонов — локальными. При создании параметра внутри тела шаблона, элемент <xsl:param>
должен быть расположен перед какими-либо другими дочерними элементами. Элемент может также содержать необязательное тело шаблона, создающее фрагмент результирующего дерева — в XSLT 1.1 это уже не разрешено. Если элемент содержит тело, атрибут select
использовать нельзя.
После объявления параметра при помощи <xsl:param>
к его значению можно обращаться в шаблоне таким же способом, как и к значению переменной, — добавляя к имени префикс «$».
Когда вы вызываете именованный шаблон при помощи <xsl:call-template>
или применяете шаблоны с использованием <xsl:apply-templates>
, вы можете задать значение используемых в шаблоне параметров с помощью элемента <xsl:with-param>
. Если самому параметру при объявлении было присвоено значение атрибутом select
элемента <xsl:param>
, это значение выступает в качестве значения параметра по умолчанию. Значение по умолчанию будет перекрыто, если вы зададите новое значение параметра при помощи элемента <xsl:with-param>
. У элемента <xsl:with-param>
два атрибута:
• name
(обязательный). Имя переменной; устанавливается в QName;
• select
(необязательный). Выражение XPath, задающее значение параметра. Если опустить этот атрибут, значение переменной будет определяться содержимым <xsl:with- param>
.
Элемент может также содержать необязательное тело шаблона, создающее фрагмент результирующего дерева, но в XSLT 1.1 это уже не разрешено.
В следующем примере (листинг 9.3) я создаю именованный шаблон с именем «COLORS» (цвета), добавляющий цвет в данные планет в результирующем HTML-документе. Этот именованный шаблон использует единственный параметр, COLOR
, который устанавливается в требуемый цвет. В примере я устанавливаю параметр COLOR
в разные цвета для разных планет, используя <xsl:with-param>
и вызывая шаблон «COLORS». Вот как это реализуется на практике.
<xsl:stylesheet version='1.1'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/PLANETS'>
<HTML>
.
.
.
</HTML>
</xsl:template>