+-->
<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
'. Подробнее о методах вывода выходящего документа
К сожалению, элемент xsl:if
в XSLT не может реализовать конструкцию if-then-else (англ. если-то-иначе). Условные выражения такого вида реализуются при помощи элементов 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:when
и xsl:otherwise
можно совместно использовать для получения конструкции типа if-then-else. Условие вида 'если выражение
истинно, то выполнить действие
иначе выполнить действие
', которое в других языках программирования может быть записано, к примеру, как
если
верно
то
выполнить
иначе
выполнить
в XSLT может быть определено следующим образом:
<xsl:choose>
<xsl:when test='
</xsl:when>
<xsl:otherwise>
шаблонC
</xsl:otherwise>
</xsl:choose>
Вместе с тем, условие вида 'если — то — иначе' это не все, на что способен элемент xsl:choose
. Возможность указывать несколько элементов xsl:when
позволяет записывать более сложные условия выбора вида:
если
верно
то
выполнить
иначе если
верно
то
выполнить
...
иначе если
верно
то
выполнить
иначе
выполнить
Такой множественный условный переход совершенно прозрачно оформляется в виде следующей xsl:choose
-конструкции:
<xsl:choose>
<xsl:when test='
</xsl:when>
<xsl:when test='
</xsl:when>
<!-- ... -->
<xsl:when test='