<xsl:choose>

   <xsl:when test='position()!=last()'>, </xsl:when>

   <xsl:when test='position()=last()-1'>and </xsl:when>

   <xsl:otherwise>.</xsl:otherwise>

  </xsl:choose>

 </xsl:template>

</xsl:stylesheet>

Вот как это работает; этот код дает тот же результат, что и код, проверяющий позицию элементов <PLANET> при помощи <xsl:if>:

<?xml version='1.0' encoding='UTF-8'?>

<DOCUMENT>

 <TITLE>

  The Planets

 </TITLE>

 <PLANETS>

  The first three planets are: Mercury, Venus, and Earth.

 </PLANETS>

</DOCUMENT>

Вот еще один пример преобразования XML-XML. В этом случае я преобразую planets.xml в новый XML-документ, сохраняя только название каждой планеты и добавляя описание:

<?xml version='1.0' encoding='UTF-8'?>

<DOCUMENT>

 <TITLE>

  The Planets

 </TITLE>

 <PLANETS>

  <PLANET>

   <NAME>Mercury</NAME>

   <DESCRIPTION>Hottest</DESCRIPTION>

  </PLANET>

  <PLANET>

   <NAME>Venus</NAME>

   <DESCRIPTION>Hot</DESCRIPTION>

  </PLANET>

  <PLANET>

   <NAME>Earth</NAME>

   <DESCRIPTION>OK</DESCRIPTION>

  </PLANET>

 </PLANETS>

</DOCUMENT>

Это преобразование можно реализовать, выбирая значение каждого элемента <NAME>, то есть заключенный в нем текст (заметьте, что такого рода строки в XSLT учитывают регистр) (листинг 5.5).

Листинг 5.5. Второй пример <xsl:choose>

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

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

 <xsl:output method='xml'/>

 <xsl:template match='PLANETS'>

  <DOCUMENT>

   <TITLE>

    The Planets

   </TITLE>

   <PLANETS>

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

   </PLANETS>

  </DOCUMENT>

 </xsl:template>

 <xsl:template match='PLANET'>

  <xsl:if test='NAME[not(text())]'>

   <xsl:message terminate='yes'>

    Each planet must have a name!

   </xsl:message>

  </xsl:if>

  <PLANET>

   <NAME>

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

   </NAME>

   <DESCRIPTION>

    <xsl:choose>

     <xsl:when test='NAME='Mercury''>Hottest</xsl:when>

     <xsl:when test='NAME='Venus''>Hot</xsl:when>

     <xsl:when test='NAME='Earth''>OK</xsl:when>

    </xsl:choose>

   </DESCRIPTION>

  </PLANET>

 </xsl:template>

</xsl:stylesheet>

Вот и все.

Предположим теперь, что нам нужно добавить в каждый элемент <PLANET> атрибут COLOR:

<?xml version='1.0'?>

<?xml-stylesheet type='text/xml' href='planets.xsl'?>

<PLANETS>

 <PLANET COLOR='RED'>

  <NAME>Mercury</NAME>

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

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

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

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

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

 </PLANET>

 <PLANET COLOR='WHITE'>

  <NAME>Venus</NAME>

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

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

0

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

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