<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 его родительского элемента