
- •Лекция 4-08
- •5.3.9. Создание текстовых узлов вXslt
- •5.3.9.1. Элементxsl:text
- •5.3.9.2. Элементxsl:value-of
- •5.3.9.3. Встроенные правила шаблона
- •1. Поздравление
- •2. Напоминание
- •5.3.9.4. Обработка пробельных символов
- •5.3.10. Создание узлов документа, комментариев, инструкций по обработке и пространства имен вXslt
- •5.3.10.1. Элемент xsl:document
- •5.3.10.2. Элементxsl:result-document
- •5.3.10.3. Элементxsl:comment
- •5.3.10.4. Элемент xsl:processing-instruction
- •5.3.10.5. Элементxsl:namespace
- •5.3.11. Копирование узлов вXslt
- •5.3.11.1. Элементxsl:copy
- •5.3.11.2. Элементxsl:copy-of
- •5.3.11.3. Элементxsl:sequence
- •5.3.12. Условная и циклическая обработка вXslt
- •5.3.12.1. Элементxsl:if
- •5.3.12.2. Элементы xsl:choose, xsl:when и xsl:otherwise
- •5.3.12.3. Элементxsl:for-each
- •5.3.12.4. Сортировка вXslt
- •5.3.13. Сообщения процессораXslt
- •5.3.14. Псевдонимы пространства имен вXslt
- •5.3.15. Нумерация вXslt
- •3. Поздравление
- •1. Поздравление
- •1. Поздравление
- •01). Поздравление
- •0:00:00:00:01)Поздравление
- •5.3.16. Форматирование чисел в xslt
- •5.3.17. Использование ключей вXslt
- •5.3.18. Переменные, параметры и функции вXslt
- •5.3.18.1. Переменные в xslt
- •5.3.18.2. Вызов именованных правил шаблона
- •5.3.18.3. Параметры в xslt
- •5.3.18.4. Функции стилей в xslt
- •5.3.19. Дополнительные функции xslt
- •5.3.19.1. Функцияdocument()
- •5.3.19.2. Функцияcurrent()
- •5.3.19.3. Функцияgenerate-id()
- •5.3.19.4. Функция system-property()
- •5.3.19.5. Функцияunparsed-entity-uri()
- •5.3.20 Использование расширений вXslt
- •5.3.20.1. Средства расширенияXslt
- •5.3.20.2. Инициатива exslt
- •5.3.20.3. Средства расширения в процессореMsxml
- •5.3.20.4. Средства расширения в процессореSaxon
5.3.12.2. Элементы xsl:choose, xsl:when и xsl:otherwise
Инструкция xsl:chooseвместе с инструкциямиxsl:whenиxsl:otherwiseсоздает более сложную конструкцию для выбора одной из нескольких имеющихся возможностей в зависимости от выполнения тех или иных условий.
Элементы xsl:choose,xsl:whenиxsl:otherwiseимеют следующий синтаксис:
<xsl:choose>
<!--
Содержимое: один или более элемент xsl:when,
необязательный элемент xsl:otherwise
-->
</xsl:choose>
<xsl:when
test="выражение"
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:when>
<xsl:otherwise>
<!--
Содержимое: конструктор последовательности
-->
</xsl:otherwise>
Элемент xsl:chooseсодержит один или несколько элементовxsl:whenи необязательный элементxsl:otherwise. При обработкеxsl:chooseпроцессор поочередно вычисляет выражения, содержащиеся в атрибутахtestэлементовxsl:when, приводит их к булевскому типу и выполняет содержимое первого (и только первого) элемента, тестовое выражение которого будет равноtrue. В случае если ни одно из тестовых выражений не равно истине и вxsl:chooseприсутствуетxsl:otherwise, процессор выполнит содержимое этого элемента. Если же ни одно из тестовых выражений не равно истине и вxsl:chooseнет элементаxsl:otherwise, то ничего не создается.
Общая форма (скелет) альтернативного выбора с помощью инструкции xsl:chooseзаписывается в следующем виде:
<xsl:choose>
<xsl:when test="условие-1">
шаблон-1
</xsl:when>
<xsl:when test="условие-2">
шаблон-2
</xsl:when>
<!-- ... -->
<xsl:when test="условие-N">
шаблон-N
</xsl:when>
<xsl:otherwise>
шаблон-N+1
</xsl:otherwise>
</xsl:choose>.
5.3.12.3. Элементxsl:for-each
Элемент xsl:for-eachиспользуется для создания в выходящем документе повторяемых частей структуры и имеет следующий синтаксис:
<xsl:for-each
select="выражение"
>
<!--
Содержимое: элементы xsl:sort,
конструктор последовательности
-->
</xsl:for-each>
Обязательный атрибут selectуказывает выражение, результатом вычисления которого должно быть множество узлов. Шаблон, содержащийся вxsl:for-each, будет выполнен процессором для каждого узла этого множества.
Пример использования элементов xsl:choose, xsl:when, xsl:othewise и xsl:for-each:
Следующая таблица стилей выделяет адреса e-mailотправителей электронной почты в документеmessage.xmlдля абонентаpetrovкрасным цветом и жирным шрифтом, а для остальных абонентом – темно-синим цветом:
<?xml version="1.0" encoding="Windows-1251"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="html"
encoding="Windows-1251"
indent="yes"
/>
<xsl:template match="text()">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="message">
<html>
<head>
<title>Выделение получателя сообщения</title>
<style>
.red {color:red; font-weight:bold}
.navy {color:navy}
</style>
</head>
<body>
<xsl:for-each select="header/to">
<p>От:
<xsl:choose>
<xsl:when test="starts-with(@address,'petrov')">
<span class="red">
<xsl:value-of select="@address"/>
</span>
</xsl:when>
<xsl:otherwise>
<span class="navy">
<xsl:value-of select="@address"/>
</span>
</xsl:otherwise>
</xsl:choose>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>.
Тело документа HTMLбудет иметь следующий вид:
<p>От: <span class="red">petrov@mail.com</span></p>
<p>От: <span class="navy">sidorov@mail.com</span></p>,
а вывод страницы в Web-браузере:
От: petrov@mail.com
От: sidorov@mail.com.