条件分岐と繰り返し

条件分岐と繰り返し

条件付き処理

条件が一つのif〜thenタイプと、選択肢が複数あるタイプがあります。

単一条件による場合分け

  <xsl:if test="条件">
    <!-- ここにtemplateを書く -->
  </xsl:if>

分岐の条件をtest属性の値として指定します。

  <xsl:if test="$countryName='UK'">
    <!-- UKの場合に適用される処理 -->
  </xsl:if>

XSLTにはelseに相当するものがありません。 else節が必要な場合には次に述べるchoose要素を使います。

複数条件による場合分け

選択肢が複数ある場合にはchoose要素を使います。 CやJavaのswitch文と似た構造になります。

  <xsl:choose>
    <xsl:when test="条件">
      <!-- ここにtemplateを書く -->
    </xsl:when>
    ...
    <xsl:otherwise>
      <!-- ここにtemplateを書く -->
    </xsl:otherwise>
  </xsl:choose>

xsl:when 要素は選択肢の数だけ書けます。 xsl:otherwise 要素は任意で、 ここにはどのxsl:when 要素にもあてはまらない場合のテンプレートを書きます。 これは else節に相当します。

test属性で指定する条件はXPathです。 以下に例を示します。

test="time[start = 0 and end = 10]"
子要素timeの子要素start,endの値がそれぞれ0,10の要素
test="position() &lt;= 3"
テンプレートにマッチしている1〜3番目の要素(positionは1から始まる)
test="position() mod 2 = 0"
テンプレートにマッチしている偶数番目の要素

繰り返し

選択したノードに直接テンプレートを適用することができます。

  <xsl:for-each select="式">
    <!-- ここにtemplateを書く -->
  </xsl:for-each>

子要素にsort要素(後述)を用意すれば、 ソートされた順番でテンプレートが適用されていきます。