Технология 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> Value-of boolean:</xsl:text>
<xsl:value-of select="$boolean"/>
<xsl:text> Copy-of boolean:</xsl:text>
<xsl:copy-of select="$boolean"/>
<xsl:text> Value-of string:</xsl:text>
<xsl:value-of select="$string"/>
<xsl:text> Copy-of string:</xsl:text>
<xsl:copy-of select="$string"/>
<xsl:text> Value-of number:</xsl:text>
<xsl:value-of select="$number"/>
<xsl:text> Copy-of number:</xsl:text>
<xsl:copy-of select="$number"/>
<xsl:text> Value-of node-set:</xsl:text>
<xsl:value-of select="$node-set"/>
<xsl:text> Copy-of node-set:</xsl:text>
<xsl:copy-of select="$node-set"/>
<xsl:text> Value-of tree:</xsl:text>
<xsl:value-of select="$tree"/>
<xsl:text> 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 < 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
рейтинг книги
Инквизитор Тьмы
1. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Вперед в прошлое 2
2. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Адвокат Империи 7
7. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Новый Рал 4
4. Рал!
Фантастика:
попаданцы
5.00
рейтинг книги
(Не)зачёт, Дарья Сергеевна!
8. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Жнецы Страданий
1. Ходящие в ночи
Фантастика:
фэнтези
9.32
рейтинг книги
Имя нам Легион. Том 5
5. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Конструктор
1. Переломный век
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Бандит 2
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Проводник
2. Другая сторона
Фантастика:
боевая фантастика
рпг
7.41
рейтинг книги
Черный Маг Императора 13
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Вечный. Книга IV
4. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Барин-Шабарин 2
2. Барин-Шабарин
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00