Категории
Самые читаемые
RUSBOOK.SU » Компьютеры и Интернет » Интернет » XSLT - Стивен Холзнер

XSLT - Стивен Холзнер

Читать онлайн XSLT - Стивен Холзнер

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 75 76 77 78 79 80 81 82 83 ... 115
Перейти на страницу:

После объявления параметра при помощи <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». Вот как это реализуется на практике.

Листинг 9.3. Применение параметров таблиц стилей

<xsl:stylesheet version="1.1"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/PLANETS">

  <HTML>

  .

  .

  .

  </HTML>

 </xsl:template>

 <xsl:template match="PLANET">

  <xsl:if test="NAME='Mercury'">

   <xsl:call-template name="COLORS">

    <xsl:with-param name="COLOR" select="'RED'"/>

   </xsl:call-template>

  </xsl:if>

  <xsl:if test="NAME='Venus'">

   <xsl:call-template name="COLORS">

    <xsl:with-param name="COLOR" select="'GREEN'"/>

   </xsl:call-template>

  </xsl:if>

  <xsl:if test="NAME='Earth'">

   <xsl:call-template name="COLORS">

    <xsl:with-param name="COLOR" select="'BLUE'"/>

   </xsl:call-template>

  </xsl:if>

 </xsl:template>

 .

 .

 .

Данная таблица вызывает шаблон «COLORS» с разными значениями параметра COLOR. Я могу воспользоваться этими цветами при форматировании данных планет. Заметьте, что я объявил параметр COLOR при помощи <xsl:param> в самом начале шаблона «COLORS»:

<xsl:stylesheet version="1.1"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/PLANETS">

  <HTML>

   .

   .

   .

  </HTML>

 </xsl:template>

 <xsl:template match="PLANET">

  <xsl:if test="NAME='Mercury'">

   <xsl:call-template name="COLORS">

    <xsl:with-param name="COLOR" select="'RED'"/>

   </xsl:call-template>

  </xsl:if>

  <xsl:if test="NAME='Venus'">

   <xsl:call-template name="COLORS">

    <xsl:with-param name="COLOR" select="'GREEN'"/>

   </xsl:call-template>

  </xsl:if>

  <xsl:if test="NAME='Earth'">

   <xsl:call-template name="COLORS">

    <xsl:with-param name="COLOR" select="'BLUE'"/>

   </xsl:call-template>

  </xsl:if>

 </xsl:template>

 <xsl:template name="COLORS"> <xsl:param name="COLOR"/>

  <TR>

   <TD>

    <FONT COLOR="{$COLOR}"><xsl:value-of select="NAME"/></FONT>

   </TD>

   <TD>

    <FONT COLOR="{$COLOR}"><xsl:apply-templates select="MASS"/></FONT>

   </TD>

   <TD>

    <FONT COLOR="{$COLOR}"><xsl:apply-templates select="RADIUS"/></FONT>

   </TD>

   <TD>

    <FONT COLOR="{$COLOR}"><xsl:apply-templates select="DAY"/></FONT>

   </TD>

  </TR>

 </xsl:template>

 <xsl:template match="MASS">

  <xsl:value-of select="."/>

  <xsl:text> </xsl:text>

  <xsl:value-of select="@UNITS"/>

 </xsl:template>

 .

 .

 .

 <xsl:template match="DAY">

  <xsl:value-of select="."/>

  <xsl:text> </xsl:text>

  <xsl:value-of select="@UNITS"/>

 </xsl:template>

</xsl:stylesheet>

И вот результат:

<HTML>

 <HEAD>

  <TITLE>

   The Colorful Planets Table

  </TITLE>

 </HEAD>

 <BODY>

  <H1>

   The Colorful Planets Table

  </H1>

  <TABLE BORDER="2">

   <TR>

    <TD>Name</TD>

    <TD>Mass</TD>

    <TD>Radius</TD>

    <TD>Day</TD>

   </TR>

   <TR>

    <TD><FONT COLOR="RED">Mercury</FONT></TD>

    <TD><FONT COLOR="RED">.0553 (Earth = 1)</FONT></TD>

    <TD><FONT COLOR="RED">1516 miles</FONT></TD>

    <TD><FONT COLOR="RED">58.65 days</FONT></TD>

   </TR>

   <TR>

    <TD><FONT COLOR="GREEN">Venus</FONT></TD>

    <TD><FONT COLOR="GREEN">.815 (Earth = 1)</FONT></TD>

    <TD><FONT COLOR="GREEN">3716 miles</FONT></TD>

    <TD><FONT COLOR="GREEN">116.75 days</FONT></TD>

   </TR>

   <TR>

    <TD><FONT COLOR="BLUE">Earth</FONT></TD>

    <TD><FONT COLOR="BLUE">1 (Earth = 1)</FONT></TD>

    <TD><FONT COLOR="BLUE">2107 miles</FONT></TD>

    <TD><FONT COLOR="BLUE">1 days</FONT></TD>

   </TR>

  </TABLE>

 </BODY>

</HTML>

Этот результирующий документ показан на рис. 9.2 (пусть даже в черно-белом исполнении).

Рис. 9.2. Вызов именованного шаблона с параметрами

В следующем примере я использую параметры для локализации используемого в шаблоне языка. Я создаю новый шаблон localize с параметром language. Если language установлен в «en», означая английский, результирующий документ будет озаглавлен «Planets»; если language установлен в «de», немецкий, результирующий документ будет озаглавлен «Planeten», а если в «fr», французский, результирующий документ будет озаглавлен «Planetes».

Здесь я вызываю шаблон localize, установив language в «fr»:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/PLANETS">

  <HTML>

   <HEAD>

    <TITLE>

     <xsl:call-template name="localize">

      <xsl:with-param name="language" select="'fr'"/>

     </xsl:call-template>

    </TITLE>

   </HEAD>

   <BODY>

    <H1>

     <xsl:call-template name="localize">

      <xsl:with-param name="language" select="'fr'"/>

     </xsl:call-template>

     .

     .

     .

А вот как выглядит параметризованный шаблон «COLORS». Заметьте, что я объявляю параметр COLOR в шаблоне при помощи элемента <xsl:param> (и заметьте, что в HTML 4.01 символьный элемент для «е» в «Planetes», который я и использую — это &#232;):

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/PLANETS">

  <HTML>

   <HEAD>

    <TITLE>

     <xsl:call-template name="localize">

      <xsl:with-param name="language" select="'fr'"/>

     </xsl:call-template>

    </TITLE>

   </HEAD>

   <BODY>

    <H1>

     <xsl:call-template name="localize">

      <xsl:with-param name="language" select="'fr'"/>

     </xsl:call-template>

    </H1>

    <TABLE BORDER="2">

     <TR>

      <TD>Name</TD>

      <TD>Mass</TD>

      <TD>Radius</TD>

      <TD>Day</TD>

1 ... 75 76 77 78 79 80 81 82 83 ... 115
Перейти на страницу:
На этой странице вы можете бесплатно скачать XSLT - Стивен Холзнер торрент бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Вася
Вася 24.11.2024 - 19:04
Прекрасное описание анального секса
Сергій
Сергій 25.01.2024 - 17:17
"Убийство миссис Спэнлоу" от Агаты Кристи – это великолепный детектив, который завораживает с первой страницы и держит в напряжении до последнего момента. Кристи, как всегда, мастерски строит