Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППТС-2 / Лекции / Lect4-08.doc
Скачиваний:
5
Добавлен:
12.05.2015
Размер:
422.91 Кб
Скачать

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.

Соседние файлы в папке Лекции