いままで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 > 100"> <xls:text>長寿</xsl:text> </xsl:if> </ns2:class>
xsl:chooseは複数条件に対して使う場合。これはxsl:whenとxsl:otherwiseを使って条件分岐を書きます。
<xsl:choose> <xsl:when test="(ns1:age >= 0) and (ns1:age < 20)"> <ns2:class> <xls:text>こども</xsl:text> </ns2:class> </xsl:when> <xsl:when test="(ns1:age > 20) and (ns1:age < 100)"> <ns2:class> <xls:text>おとな</xsl:text> </ns2:class> </xsl:when> <xsl:when test="ns1:age > 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; との一貫性を考えて、定義済み実態参照を示しました。
とりあえず条件分岐に関してはこれくらいで。