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

   is planet number <xsl:value-of select='position()'/> from the sun.

  </P>

  <xsl:if test='position() = last()'><HR/><xsl:if>

 </xsl:template>

</xsl:stylesheet>

Вот результат — как видите, элемент <HR> появляется только после последней перечисленной планеты:

<HTML>

 <HEAD>

  <TITLE>

   Planets

  </TITLE>

 </HEAD>

 <BODY>

  <P>

   Mercury is planet number 1 from the sun.

  </P>

  <P>

   Venus is planet number 2 from the sun.

  </P>

  <P>

   Earth is planet number 3 from the sun.

  </P>

  <HR>

 </BODY>

</HTML>

Рассмотрим еще один пример — преобразование XML-XML, в котором перечисляются планеты из planets.xml. Однако я хочу, чтобы выводилось не просто «The first three planets are: Mercury Venus Earth» (первые три планеты: Меркурий Венера Земля), a «The first three planets are: Mercury, Venus, and Earth». Необходимые знаки пунктуации можно добавить, определяя текущий элемент при помощи функции position и проверяя позицию при помощи <xsl:if> (листинг 5.2).

Листинг 5.2. Второй пример применения <xsl:if>

<?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>

    The first three planets are: <xsl:apply-templates select='PLANET'/>

   </PLANETS>

  </DOCUMENT>

 </xsl:template>

 <xsl:template match='PLANET'>

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

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

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

  <xsl:if test=position()=last()'>.</xsl:if>

 </xsl:template>

</xsl:stylesheet>

Вот результат:

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

<DOCUMENT>

 <TITLE>

  The Planets

 </TITLE>

 <PLANETS>

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

 </PLANETS>

</DOCUMENT>

Как видите, я смог добавить правильные знаки пунктуации, определяя место в документе при помощи <xsl:if>.

При помощи <xsl:if> можно также обнаруживать ошибки во время преобразования. Например, при помощи <xsl:if> можно вывести сообщение, есть ли в planets.xml элемент <NAME> (листинг 5.3).

Листинг 5.3. Обнаружение ошибок при помощи <xsl:if>

<?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>

    The first three planets are: <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>

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

  <xsl:if test='position()!=last()'>. </xsl:if>

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

  <xsl:if test='position()=last()'>.</xsl:if>

 </xsl:template>

</xsl:stylesheet>

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

0

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

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