Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Tests multiple conditions in conjunction with the <xsl:otherwise>
and <xsl:when>
elements.
<xsl:choose>
</xsl:choose>
Element Information
Number of occurrences |
Unlimited |
Parent elements |
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, output elements |
Child elements |
Remarks
The <xsl:when>
children of the <xsl:choose>
element are tested, in order from top to bottom, until a test
attribute on one of these elements accurately describes conditions in the source data, or until an <xsl:otherwise>
element is reached. Once an <xsl:when>
or <xsl:otherwise>
element is chosen, the <xsl:choose>
block is exited. No explicit break or exit statement is required.
For simple conditional testing, use the <xsl:if>
element.
Example
The following example shows a template for <order>
elements, and inserts a size indicator before the contents of each <order>
. This size indicator is based on the value of the <total>
element within each <order>
element. If the total is less than 10, the text "(small)
" is added. If the total is less than 20, the text "(medium)
" is added. If the total is 20 or more, the text "(large)
" is added.
XML File (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 File (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>
Output
(small) 9
(medium) 19
(large) 29