Книга: Технология XSLT

Элемент xsl:if

Элемент 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 его родительского элемента
   +-->
  <xsl:if test=". = ../@active">
   <!-- To выводим атрибут selected -->
   <xsl:attribute name="selected">selected</xsl:attribute>
  </xsl:if>
  <xsl:value-of select="."/>
 </option>
</xsl:template>

Результат:

<option>Alpha</option>
<option selected>Bravo</option>
<option>Charlie</option>

Примечание

В данном преобразовании использовался метод вывода "html". Подробнее о методах вывода выходящего документа см. раздел "Контроль вывода документа" 8 главы.

К сожалению, элемент xsl:if в XSLT не может реализовать конструкцию if-then-else (англ. если-то-иначе). Условные выражения такого вида реализуются при помощи элементов xsl:choose, xsl:when и xsl:otherwise.

Оглавление книги


Генерация: 0.183. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз