Элемент <xsl:choose>
Проводит проверку по нескольким условиям совместно с элементами <xsl:otherwise> и <xsl:when>.
<xsl:choose>
</xsl:choose>
Сведения об элементе
Количество вхождений |
Без ограничений |
Родительские элементы |
xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processing-instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, элементы вывода |
Дочерние элементы |
Заметки
В порядке убывания проверяются дочерние элементы <xsl:when> элемента <xsl:choose> до тех пор, пока атрибут test в одном из этих элементов не опишет в точности условия, указанные в исходных данных, либо пока не будет достигнут элемент <xsl:otherwise>. Блок <xsl:choose> завершается, когда выбран элемент <xsl:when> или <xsl:otherwise>. Не требуется явной инструкции остановки или завершения.
Для простых условных проверок используйте элемент <xsl:if>.
Пример
Следующий пример иллюстрирует шаблон для элементов <order>, перед содержимым каждого элемента <order> вставляется индикатор размера. Индикатор размера основывается на значении элемента <total> внутри каждого элемента <order>. Если сумма меньше 10, добавляется текст «(small)». Если сумма меньше 20, добавляется текст «(medium)». Если сумма больше или равна 20, добавляется текст «(large)».
XML-файл (order.xml)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="refchoose.xsl" ?>
<orders>
<order>
<lineitem/>
<lineitem/>
<total>9</total>
</order>
<order>
<lineitem/>
<lineitem/>
<total>19</total>
</order>
<order>
<lineitem/>
<lineitem/>
<total>29</total>
</order>
</orders>
XSLT-файл (refchoose.xsl)
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="order">
<xsl:choose>
<xsl:when test="total < 10">
(small)
</xsl:when>
<xsl:when test="total < 20">
(medium)
</xsl:when>
<xsl:otherwise>
(large)
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates />
<BR/>
</xsl:template>
</xsl:stylesheet>
Вывод
(small) 9
(medium) 19
(large) 29