<xsl:copy-of select='$boolean'/>

  <xsl:text>&#10;Value-of string:</xsl:text>

  <xsl:value-of select='$string'/>

  <xsl:text>&#10;Copy-of string:</xsl:text>

  <xsl:copy-of select='$string'/>

  <xsl:text>&#10;Value-of number:</xsl:text>

  <xsl:value-of select='$number'/>

  <xsl:text>&#10;Copy-of number:</xsl:text>

  <xsl:copy-of select='$number'/>

  <xsl:text>&#10;Value-of node-set:</xsl:text>

  <xsl:value-of select='$node-set'/>

  <xsl:text>&#10;Copy-of node-set:</xsl:text>

  <xsl:copy-of select='$node-set'/>

  <xsl:text>&#10;Value-of tree:</xsl:text>

  <xsl:value-of select='$tree'/>

  <xsl:text>&#10;Copy-of tree:</xsl:text>

  <xsl:copy-of select='$tree'/>

 </xsl:template>

</xsl:stylesheet>

Листинг 7.22. Выходящий документ

Value-of boolean:false

Copy-of boolean:false

Value-of string:text

Copy-of string:text

Value-of number:3.14

Copy-of number:3.14

Value-of node-set:10

Copy-of node- set:<item>10</item><item>20</item><item>30</item>

Value-of tree:

  text

   text

Copy-of tree:<root>

  text

  <branch>

   text

   <leaf/>

   <leaf/>

  </branch>

  <leaf/>

 </root>

Условная обработка

В XSLT имеются две инструкции, которые поддерживают условную обработку — xsl:if и xsl:choose. Инструкция xsl:if позволяет создавать простые условия типа 'если-то', в то время как xsl:choose создает более сложную конструкцию для выбора одной из нескольких имеющихся возможностей в зависимости от выполнения тех или иных условий.

Элемент xsl:if

Синтаксис элемента следующий:

<xsl:if

 test='выражение'>

 <!-- Содержимое: шаблон -->

</xsl:if>

Элемент xsl:if является простейшим условным оператором в XSLT. Выражение, содержащееся в обязательном атрибуте test, вычисляется и приводится к булевому типу. В том и только том случае, если выражение имеет значение true, процессор выполняет шаблон, содержащийся в xsl:if.

Вследствие того, что атрибуты в XML не могут содержать некоторые специальные символы (такие как '<' и '&'), их необходимо заменять символьными сущностями. В особенности это касается сравнения чисел типа 'меньше'; объявление вида

<xsl:if test='a < b'/>

будет с точки зрения синтаксиса XML некорректным. Вместо него следует использовать эквивалентное объявление

<xsl:if test='a &lt; b'/>

Следует заметить, что символ 'больше' ('>') заменять сущностью необязательно. Однако из соображений единообразия принято заменять и его.

Пример

Предположим, мы преобразовываем список названий

<list active='Bravo'>

 <item>Alpha</item>

 <item>Bravo</item>

 <item>Charlie</item>

</list>

во фрагмент HTML-кода, в котором каждый элемент item должен быть преобразован в соответствующий элемент option, а значение, выбранное во входящем документе атрибутом active элемента list, должно быть помечено булевым атрибутом selected.

Листинг 7.23. Шаблон преобразования, использующий элемент xsl:if

<xsl:template match='item'>

 <option>

  <!--

   | Если текстовое значение элемента равно

   | значению атрибута active его родительского элемента

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

0

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

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