YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

XSLにおける条件分岐

いままでXSLはIDEで書いてもらってたけど、手書きでゴリゴリと書くことになって改めて何も分かってないことが発覚。というわけでまずは基本のキの条件分岐から。
XSLには条件分岐のタグが2つあります。

  • xsl:if
  • xsl:choose
    • xsl:when, xsl:otherwise

上記を見て分かるとおり、XSLにはif-elseという分岐はありません。まずxsl:ifに関して。
xsl:ifは単一の条件に対して使う場合。例外処理はありません。

<ns2:class>
    <xsl:if test="ns1:age &gt; 100">
        <xls:text>長寿</xsl:text>
    </xsl:if>
</ns2:class>

xsl:chooseは複数条件に対して使う場合。これはxsl:whenとxsl:otherwiseを使って条件分岐を書きます。

<xsl:choose>
    <xsl:when test="(ns1:age &gt;= 0) and (ns1:age &lt; 20)">
        <ns2:class>
            <xls:text>こども</xsl:text>
        </ns2:class>
    </xsl:when>
    <xsl:when test="(ns1:age &gt; 20) and (ns1:age &lt; 100)">
        <ns2:class>
            <xls:text>おとな</xsl:text>
        </ns2:class>
    </xsl:when>
    <xsl:when test="ns1:age &gt; 100">
        <ns2:class>
            <xls:text>長寿</xsl:text>
        </ns2:class>
    </xsl:when>
    <xsl:otherwise>
        <ns2:class>
            <xls:text>いみわかんね</xsl:text>
        </ns2:class>
    </xsl:otherwise>
</xsl:choose>

こちらがいわゆるif-elseに対応します。またtest属性の中で条件判断をするわけですが、そこで使えるXPath式は下記のとおり。

数値演算子 + 加算
* 乗算
div 除算
mod 余り
論理演算子 and 論理積
or 論理和
比較演算子 = 等しい
!= 等しくない
&gt; より大きい
&lt; より小さい
&gt;= 以上
&lt;= 以下

なお「より大きい」に関しては > でもいいけど &lt; との一貫性を考えて、定義済み実態参照を示しました。
とりあえず条件分岐に関してはこれくらいで。