<DAY UNITS='days'>116.75</DAY>

  <RADIUS UNITS='miles'>3716</RADIUS>

  <DENSITY UNITS='(Earth = 1)'>.943</DENSITY>

  <DISTANCE UNITS='million miles'>66.8</DISTANCE><!--B перигелии-- >

 </PLANET>

 <PLANET COLOR='BLUE'>

  <NAME>Earth</NAME>

  <MASS UNITS='(Earth = 1)'>1</MASS>

  <DAY UNITS='days'>1</DAY>

  <RADIUS UNITS='miles'>2107</RADIUS>

  <DENSITY UNITS='(Earth = 1)'>1</DENSITY>

  <DISTANCE UNITS='million miles'>128.4</DISTANCE><!--B перигелии-- >

 </PLANET>

</PLANETS>

Отобразить названия различных планет при помощи элемента <xsl:choose>, отформатированные по-разному при помощи тегов HTML <В>, <I> и <U> в зависимости от значения атрибута COLOR, можно следующим образом (листинг 5.6).

Листинг 5.6. Форматирование при помощи <xsl:choose>

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

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

 <xsl:template match='PLANETS'>

  <HTML>

   <HEAD>

    <TITLE>

     Planets

    </TITLE>

   </HEAD>

   <BODY>

    <xsl:apply-templates select='PLANET'/>

   </BODY>

  </HTML>

 </xsl:template>

 <xsl:template match='PLANET'>

  <xsl:choose>

   <xsl:when test='@COLOR = 'RED''>

    <В>

     <xsl:value-of select='NAME'/>

    </B>

   </xsl:when>

   <xsl:when test='@COLOR = 'WHITE''>

    <I>

     <xsl:value-of select='NAME'/>

    </I>

   </xsl:when>

   <xsl:when test='@COLOR = 'BLUE''>

    <U>

     <xsl:value-of select='NAME'/>

    </U>

   </xsl:when>

   <xsl:otherwise>

   <PRE>

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

   </PRE>

  </xsl:otherwise>

 </xsl:choose>

</xsl:template>

</xsl:stylesheet>

Вот результирующий документ:

<HTML>

 <HEAD>

  <TITLE>

   Planets

  </TITLE>

 </HEAD>

 <BODY>

  <B>Mercury</B>

  <I>Venus</I>

  <U>Earth</U>

 </BODY>

</HTML>

Как вы видели, при помощи <xsl:if> можно проверять единственное условие, а при помощи <xsl:choose> — несколько; аналогичные конструкции присутствуют в большинстве языков программирования. Кроме подобных этим условных операторов, в большей части языков программирования существуют также операторы цикла, и в XSLT содержится нечто похожее — элемент <xsl:for-each>.

Элемент <xsl:for-each>

Элемент <xsl:for-each> позволяет применять тело шаблона в цикле снова и снова для всех элементов набора узлов. С технической точки зрения, он работает с набором узлов, который возвращает выражение XPath и выполняет одно и то же действие с каждым узлом в наборе. При каждом шаге цикла тело шаблона применяется к следующему узлу из набора узлов, что дает возможность легко обрабатывать несколько узлов.

<XSL:FOR-EACH> ПРОТИВ <XSL:APPLY-TEMPLATES>

Вы могли заметить, что это описание практически такое же, как и у элемента <xsl:apply- templates>, и я сравню элементы <xsl:for-each> и <xsl:apply-templates> через несколько страниц.

У элемента <xsl:for-each> один атрибут:

• select (обязательный). Принимает значение выражения XPath, возвращающее набор узлов, который нужно обработать в цикле.

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

0

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

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