W3C勧告XSLTのバージョンXSLT 2.0の「Repetition / 繰り返し・反復」とは
XSL Transformations (XSLT) Version 2.0 / W3C Recommendation 23 January 2007の目次に沿った日本語訳です。
当サイト管理人が2009年04月、意訳したものですが、構文解釈の違いや翻訳の違いが含まれるかもしれません。正式文書はW3C 各種仕様書(英語版)である事を予めご了承ください。
8 条件分岐処理 / Conditional Processing 8.1 [ xsl:if ]による条件分岐処理 8.2 [ xsl:choose ]による条件分岐処理 |
XSLTにある2つの命令は、 xsl:if
と xsl:choose
という条件付き処理をサポートします。
xsl:if
命令は、単純に if-then (もし、Aならば、その時はB) という条件を提供します;
xsl:choose
命令は、いくつかの可能性がある際に、1つの選択肢の選択をサポートします。
xsl:if
を伴う条件付き処理<!-- カテゴリ:命令
-->
<xsl:if
test = expression>
<!-- Content:
sequence-constructor -->
</xsl:if>
xsl:if
要素は、命令 test
属性を持ち、式を記述します。
コンテンツは、シーケンスコンストラクタです。
xsl:if
命令の結果は、 test
属性にある式の有効なboolean値XPに依存します。
式の有効な boolean 値を決める規則は、[XPath 2.0]で与えます。:
それらは、条件付きのXPath式において利用した規則と同じです。
もし、式のその有効な boolean 値が、「true」であれば、
シーケンスコンストラクタが評価され、
(参照先: 5.7 シーケンスコンストラクタ)、そしてそのノード結果であるシーケンスは、
xsl:if
命令の結果として返されます;
その他のものは、シーケンスコンストラクタは、評価されず、そしてカラのシーケンスが返されます。
次に続く例は、カンマ区切りリストとしてフォーマット(初期化)される名前のグループにある名前です:
<xsl:template match="namelist/name"> <xsl:apply-templates/> <xsl:if test="not(position()=last())">, </xsl:if> </xsl:template>
次に続くのは、テーブル行ごとの色が黄色です:
<xsl:template match="item"> <tr> <xsl:if test="position() mod 2 = 0"> <xsl:attribute name="bgcolor">yellow</xsl:attribute> </xsl:if> <xsl:apply-templates/> </tr> </xsl:template>
xsl:choose
を伴う条件付き処理<!-- カテゴリ: 命令
-->
<xsl:choose>
<!-- Content: (xsl:when+、 xsl:otherwise?) -->
</xsl:choose>
<xsl:when
test = expression>
<!-- Content:
sequence-constructor -->
</xsl:when>
<xsl:otherwise>
<!-- Content:
sequence-constructor -->
</xsl:otherwise>
xsl:choose
要素は、とり得る選択肢の番号間の1つを選択します。
それは、付加的な xsl:otherwise
要素によって続いた1つ以上の xsl:when
要素のシーケンスで構成します。
各 xsl:when
要素は、 単独の属性、 test
を持ち、式を記述します。
xsl:when
と xsl:otherwise
要素のコンテンツは、シーケンスコンストラクタです。
xsl:choose
要素が処理される際には、満たされる xsl:when
要素の内の1つでない限り(である場合を除き)、 xsl:when
要素のそれぞれは、(スタイルシートに現れる要素指定の中に)戻る中でテストされます。
もし、満たされる xsl:when
要素が存在しない場合には、
以下に記述したように xsl:otherwise
要素が考慮されます。
もし、その test
属性にある式の有効な boolean 値XPが、 true
であれば、xsl:when
要素は、満たされます。
[XPath 2.0]で与えられる式の有効な boolean 値を決定する規則:それらは、条件付きXPath式において利用した規則と同じです。
最初のコンテンツ、そして満たされる最初の xsl:when
要素だけが評価され、そしてその結果シーケンスは、
xsl:choose
命令の結果として返されます。
もし、満たされる xsl:when
要素が存在しない場合には、
xsl:otherwise
要素のコンテンツが評価され、結果シーケンスは、 xsl:choose
命令の結果として返されます。
もし、満たされる xsl:when
要素が存在しない、且つ xsl:otherwise
要素が存在しない場合には、
xsl:choose
命令の結果は、カラのシーケンスです。
xsl:when
、または、 xsl:otherwise
命令の選択したシーケンスコンストラクタだけが評価されます。
xsl:when
命令における test
式が、1つを選択した後は、評価されません。
次に続く例は、ネストされた指定リストの深さに依存するアラビア数字、文字列、ローマ数字を利用して指定リストにアイテムを列挙します。
<xsl:template match="orderedlist/listitem"> <fo:list-item indent-start='2pi'> <fo:list-item-label> <xsl:variable name="level" select="count(ancestor::orderedlist) mod 3"/> <xsl:choose> <xsl:when test='$level="1"'> <xsl:number format="i"/> </xsl:when> <xsl:when test='$level="2"'> <xsl:number format="a"/> </xsl:when> <xsl:otherwise> <xsl:number format="1"/> </xsl:otherwise> </xsl:choose> <xsl:text>. </xsl:text> </fo:list-item-label> <fo:list-item-body> <xsl:apply-templates/> </fo:list-item-body> </fo:list-item> </xsl:template>
9. 変数とパラメータ / Variables and Parameters >>