Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:
Листинг 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 его родительского элемента

+-->

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

Элементы xsl:choose, xsl:when, xsl:otherwise

Ниже даны синтаксические конструкции этих элементов:

<xsl:choose>

 <!--

| Содержимое: один или более элемент xsl:when, опциональный

  • Читать дальше
  • 1
  • ...
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: