<xsl:stylesheet version='1.0'

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

 <xml: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:choose>

   .

   .

   .

  </xsl:choose>

 </xsl:template>

</xsl:stylesheet>

Нам нужно проверить, в каком месте документа мы находимся, при помощи включения нескольких элементов <xsl:when>. У этого элемента только один атрибут:

• test (обязательный). Принимает логическое (Boolean) значение (true/false) проверяемого условия.

Элемент <xsl:when> содержит тело шаблона.

Атрибут проверки принимает значение true/false выражения, определяющего, будет ли применяться заключенное в элементе <xsl:when> тело шаблона или нет. Например, вот как я добавил элементы <xsl:when> с соответствующими знаками пунктуации для всех планет, кроме последней:

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

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

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

   .

   .

   .

  </xsl:choose>

 </xsl:template>

</xsl:stylesheet>

Эти два элемента <xsl:when> выбирают все элементы <PLANET> за исключением последнего, поэтому элемент <xsl:otherwise> можно применить для последнего элемента <PLANET>. Тело шаблона в этом элементе будет применено, если ни в одном элементе <xsl:when> в элементе <xsl:choose> условие не примет значение true.

У элемента <xsl:otherwise> нет атрибутов, и он содержит тело шаблона. Вот как это выглядит в листинге 5.4.

Листинг 5.4. Применение <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>

    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'/>

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

0

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

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