Conditional Processing

Figure 1. Conditional processing

Input Example:

            <declare name="v" initial-value="1"/>
            <if-var name="v" match="1*">
               <_xml_>matched</_xml_>
            </if-var>
            <if-var name="v" not-match="1*">
               <_xml_>not matched</_xml_>
            </if-var>
            <if-var name="v" match="[0-9]+" match-type="regex">
               <_xml_>regex matched</_xml_>
            </if-var>
            <if test="$v > 0">
               <_xml_>xpath matched</_xml_>
            </if>

Output Example:

            <_xml_>matched</_xml_>
            <_xml_>regex matched</_xml_>
            <_xml_>xpath matched</_xml_>
            <declare name="v" initial-value="1"/>
Figure 2. Variable in other realms can also be tested

Input Example:

            <param name="v" value="1"/>
            <if-var name="v" match="1*" realm="param">
               <_xml_>matched</_xml_>
            </if-var>
            <option name="tmp_dir" value="/tmp"/>
            <if-var name="tmp_dir" match="1*" realm="option">
               <_xml_>not_matched</_xml_>
            </if-var>

Output Example:

            <param name="v" value="1"/>
            <_xml_>matched</_xml_>
            <option name="tmp_dir" value="/tmp"/>

Choose statements can involve multiple types of tests. The content of the first successful <incode>when</incode> or <incode>when-var</incode> test will be processed. If none is successful, the <incode>otherwise</incode> content, if it exist, is processed.

Input Example:

            <declare name="v" initial-value="v"/>
            <choose>
               <when-var name="v" match="v1">
                  <bad/>
               </when-var>
               <when-var name="v" match="v2"/>
               <when-var name="v" match="v">
                  <good1/>
               </when-var>
            </choose>
            <choose>
               <when test="contains($v, 'w')">
                  <bad/>
               </when>
               <when-var name="v" not-match="v"/>
               <when test="$v = 'v'">
                  <good2/>
               </when>
            </choose>
            <choose>
               <when-var name="v" match="v1">
                  <bad/>
               </when-var>
               <when-var name="v" match="v2"/>
               <when-var name="v" match="v3"/>
               <otherwise>
                  <good3/>
               </otherwise>
            </choose>

Output Example:

            <good1/>
            <good2/>
            <good3/>
            <declare name="v" initial-value="v"/>

Pass the value of a CGI parameter to an option while controlling its range and assigning a default in case the range is not satisfied:

Input Example:

            <declare name="query.num-total"/>
            <param name="num" value="500"/>
            <set-var name="query.num-total">
               <choose>
                  <when-var name="num" realm="param" match="^[0-9]?[0-9]?[0-9]$" match-type="regex">
                     <value-of realm="param" name="num"/>
                  </when-var>
                  <otherwise>200</otherwise>
               </choose>
            </set-var>

Output Example:

            <param name="num" value="500"/>
            <declare name="query.num-total" initial-value="500" modified="modified"/>

To proceed with this tutorial, click Templates.