Элемент xsl:choose содержит один или несколько элементов xsl:when и необязательный элемент xsl:otherwise.
При обработке xsl:choose процессор поочередно вычисляет выражения, содержащиеся в атрибутах test элементов xsl:when, приводит их к булевому типу и выполняет содержимое первого (и только первого) элемента, тестовое выражение которого будет равно true. В случае если ни одно из тестовых выражений не обратилось в "истину" и в xsl:choose присутствует xsl:otherwise, процессор выполнит содержимое этого элемента.
В следующем примере пункты в упорядоченном списке нумеруются с помощью арабских цифр, букв или римских цифр в зависимости от глубины вложенности упорядоченных списков.
1 2 3 4 5 6 7 8 910111213141516171819202122232425
<xsl:templatematch="orderedlist/listitem"><fo:list-itemindent-start='2pi'><fo:list-item-label><xsl:variablename="level"select="count( ancestor::orderedlist ) mod 3"/><xsl:choose><xsl:whentest="$level = 1"><xsl:numberformat="i"/></xsl:when><xsl:whentest="$level = 2"><xsl:numberformat="a"/></xsl:when><xsl:otherwise><xsl:numberformat="1"/></xsl:otherwise></xsl:choose><xsl:text>.</xsl:text></fo:list-item-label><fo:list-item-body><xsl:apply-templates/></fo:list-item-body></fo:list-item></xsl:template>