<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>
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.
<xsl:template match='item'>
<option>
<!--
| Если текстовое значение элемента равно
| значению атрибута active его родительского элемента
