気の向くままに辿るIT/ICT/IoT
XSLT

【Conditional Processing / 条件分岐処理】XSLT 2.0/XSL Transformations Version2.0/Extensible Stylesheet Language Transformations Version2.0

ホーム前へ次へ
XSLT 2.0のConditional Processing / 条件分岐処理?

【Conditional Processing / 条件分岐処理】XSLT 2.0/XSL Transformations Version2.0/Extensible Stylesheet Language Transformations Version2.0

XSLT 2.0【Conditional Processing / 条件分岐処理】とは

 W3C勧告XSLTバージョンXSLT 2.0の「Repetition / 繰り返し・反復」とは

 XSL Transformations (XSLT) Version 2.0 / W3C Recommendation 23 January 2007の目次に沿った日本語訳です。

 当サイト管理人が2009年04月、意訳したものですが、構文解釈の違いや翻訳の違いが含まれるかもしれません。正式文書はW3C 各種仕様書(英語版)である事を予めご了承ください。

<< 7. 繰り返し・反復 / Repetition

XSLT 2.0条件分岐処理目次


8 条件分岐処理 / Conditional Processing
 8.1 [ xsl:if ]による条件分岐処理
 8.2 [ xsl:choose ]による条件分岐処理

8 条件付き処理・条件分岐処理

XSLTにある2つの命令は、 xsl:ifxsl:choose という条件付き処理をサポートします。 xsl:if 命令は、単純に if-then (もし、Aならば、その時はB) という条件を提供します; xsl:choose 命令は、いくつかの可能性がある際に、1つの選択肢の選択をサポートします。

8.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: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>

8.2 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:whenxsl: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:choose を利用する

次に続く例は、ネストされた指定リストの深さに依存するアラビア数字、文字列、ローマ数字を利用して指定リストにアイテムを列挙します。

<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 >>


ホーム前へ次へ