<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>ASF: &lt;xsl:choose&gt; / &lt;xsl:when&gt; / &lt;xsl:otherwise&gt;</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="stylesheet" type="text/css" href="resources/apache-xalan.css" />
</head>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the  "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 -->
<body>
<div id="title">
<table class="HdrTitle">
<tbody>
<tr>
<th rowspan="2">
<a href="../index.html">
<img alt="Trademark Logo" src="resources/XalanJ-Logo-tm.png" width="190" height="90" />
</a>
</th>
<th text-align="center" width="75%">
<a href="index.html">XSLTC Design</a>
</th>
</tr>
<tr>
<td valign="middle">&lt;xsl:choose&gt; / &lt;xsl:when&gt; / &lt;xsl:otherwise&gt;</td>
</tr>
</tbody>
</table>
<table class="HdrButtons" align="center" border="1">
<tbody>
<tr>
<td>
<a href="http://www.apache.org">Apache Foundation</a>
</td>
<td>
<a href="http://xalan.apache.org">Xalan Project</a>
</td>
<td>
<a href="http://xerces.apache.org">Xerces Project</a>
</td>
<td>
<a href="http://www.w3.org/TR">Web Consortium</a>
</td>
<td>
<a href="http://www.oasis-open.org/standards">Oasis Open</a>
</td>
</tr>
</tbody>
</table>
</div>
<div id="navLeft">
<ul>
<li>
<a href="index.html">Overview</a>
</li></ul><hr /><ul>
<li>
<a href="xsltc_compiler.html">Compiler design</a>
</li></ul><hr /><ul>
<li>
<a href="xsl_whitespace_design.html">Whitespace</a>
</li>
<li>
<a href="xsl_sort_design.html">xsl:sort</a>
</li>
<li>
<a href="xsl_key_design.html">Keys</a>
</li>
<li>
<a href="xsl_comment_design.html">Comment design</a>
</li></ul><hr /><ul>
<li>
<a href="xsl_lang_design.html">lang()</a>
</li>
<li>
<a href="xsl_unparsed_design.html">Unparsed entities</a>
</li></ul><hr /><ul>
<li>
<a href="xsl_if_design.html">If design</a>
</li>
<li>Choose|When|Otherwise design<br />
</li>
<li>
<a href="xsl_include_design.html">Include|Import design</a>
</li>
<li>
<a href="xsl_variable_design.html">Variable|Param design</a>
</li></ul><hr /><ul>
<li>
<a href="xsltc_runtime.html">Runtime</a>
</li></ul><hr /><ul>
<li>
<a href="xsltc_dom.html">Internal DOM</a>
</li>
<li>
<a href="xsltc_namespace.html">Namespaces</a>
</li></ul><hr /><ul>
<li>
<a href="xsltc_trax.html">Translet &amp; TrAX</a>
</li>
<li>
<a href="xsltc_predicates.html">XPath Predicates</a>
</li>
<li>
<a href="xsltc_iterators.html">Xsltc Iterators</a>
</li>
<li>
<a href="xsltc_native_api.html">Xsltc Native API</a>
</li>
<li>
<a href="xsltc_trax_api.html">Xsltc TrAX API</a>
</li>
<li>
<a href="xsltc_performance.html">Performance Hints</a>
</li>
</ul>
</div>
<div id="content">
<h2>&lt;xsl:choose&gt; / &lt;xsl:when&gt; / &lt;xsl:otherwise&gt;</h2>

  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>Contents</h3>
  <ul>
    <li>
<a href="#functionality">Functionality</a>
</li>
    <li>
<a href="#implementation">Implementation</a>
</li>    
  </ul>
  

  <a name="functionality">‌</a>
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>Functionality</h3>

  <p>The <code>&lt;xsl:choose&gt;</code> element is used to determine one
  course of action based on a series of tests. Each test is done inside an
  <code>&lt;xsl:when&gt;</code> element. If a test succeeds, the body of the
  <code>&lt;xsl:when&gt;</code> element is executed. If no tests fail then
  a <code>&lt;xsl:otherwise&gt;</code> element can be used to specify a
  default action:</p>

  <blockquote class="source">
<pre>
    &lt;xsl:choose&gt;
      &lt;xsl:when test="element-available('some-extension')"&gt;
          ...
      &lt;/xsl:when&gt;
      &lt;xsl:when test="function-availabe('saxon:nodeset')"&gt;
          ...
      &lt;/xsl:when&gt;
      &lt;xsl:otherwise&gt;
          ...
      &lt;/xsl:otherwise&gt;
    &lt;/xsl:choose&gt;</pre>
</blockquote>

  

  <a name="implementation">‌</a>
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>Implementation</h3>

  <p>The <code>Choose</code> class places all <code>When</code> child-nodes
  in a vector. The <code>Choose</code> class translates the "test"-attribute
  of all <code>When</code> nodes (in strict order) and chains them together
  in an if-else style. The expression that holds each test contains a true-
  and a false-list. These lists are vectors of branch targets that should be
  used if the test succeeds or fails, respectively. The first test's
  false-list is pointed to the start of the next test (ie. if the first test
  fails, then we run the next test). The last test's false-list points directly
  to the code for the body of the <code>&lt;xsl:otherwise&gt;</code> element.
  </p>

  <p>Just as with the <code>&lt;xsl:if&gt;</code>-element, special care is
  taken for the <code>element-available()</code> and
  <code>function-available()</code> functions. These functions are evaluated at
  compile-time (this can be done since all parameters for these functions are
  literals) and the body of a <code>&lt;xsl:when&gt;</code> element is not
  compiled if we know that it will never be needed at runtime.</p>

  

<p align="right" size="2">
<a href="#content">(top)</a>
</p>
</div>
<div id="footer">Copyright © 1999-2014 The Apache Software Foundation<br />Apache, Xalan, and the Feather logo are trademarks of The Apache Software Foundation<div class="small">Web Page created on - Thu 2014-05-15</div>
</div>
</body>
</html>
