Книга: Технология XSLT
Элемент xsl:if
Разделы на этой странице:
Элемент 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 -->
<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
". Подробнее о методах вывода выходящего документа см. раздел "Контроль вывода документа" 8 главы.
К сожалению, элемент xsl:if
в XSLT не может реализовать конструкцию if-then-else (англ. если-то-иначе). Условные выражения такого вида реализуются при помощи элементов xsl:choose
, xsl:when
и xsl:otherwise
.
- Глава 12 Документы XSL-FO
- Элемент xsl:param
- Элемент xsl:element
- Форматирующие объекты XSL-FO
- Элементы xsl:choose, xsl:when, xsl:otherwise
- Элемент : создание новых элементов на этапе выполнения
- Расширяемость XSLT
- Элемент xsl:number
- Элемент xsl:processing-instruction
- Элемент xsl:for-each
- Элемент xsl:copy
- Приложение 2 Краткий справочник элементов и атрибутов XSLT