Чтение онлайн

на главную - закладки

Жанры

Технология XSLT

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

Шрифт:

<xsl:variable name="boolean" select="values/boolean='true'"/>

<xsl:variable name="string" select="string(values/string)"/>

<xsl:variable name="number" select="number(values/number)"/>

<xsl:variable name="node-set" select="values/node-set/*"/>

<xsl:variable name="tree">

<xsl:copy-of select="values/tree/*"/>

</xsl:variable>

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

<xsl:value-of select="$boolean"/>

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

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

+-->

<xsl:if test=". = ../@active">

<!-- To выводим атрибут selected -->

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

Возвышение Меркурия. Книга 4

Кронос Александр
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Возвышение Меркурия. Книга 4

Инквизитор Тьмы

Шмаков Алексей Семенович
1. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы

Вперед в прошлое 2

Ратманов Денис
2. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 2

Адвокат Империи 7

Карелин Сергей Витальевич
7. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 7

Новый Рал 4

Северный Лис
4. Рал!
Фантастика:
попаданцы
5.00
рейтинг книги
Новый Рал 4

(Не)зачёт, Дарья Сергеевна!

Рам Янка
8. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
(Не)зачёт, Дарья Сергеевна!

Жнецы Страданий

Казакова Екатерина
1. Ходящие в ночи
Фантастика:
фэнтези
9.32
рейтинг книги
Жнецы Страданий

Имя нам Легион. Том 5

Дорничев Дмитрий
5. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 5

Конструктор

Семин Никита
1. Переломный век
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Конструктор

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Проводник

Кораблев Родион
2. Другая сторона
Фантастика:
боевая фантастика
рпг
7.41
рейтинг книги
Проводник

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Вечный. Книга IV

Рокотов Алексей
4. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга IV

Барин-Шабарин 2

Гуров Валерий Александрович
2. Барин-Шабарин
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Барин-Шабарин 2