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

【Repetition / 繰り返し・反復】XSLT 2.0/XSL Transformations Version2.0/Extensible Stylesheet Language Transformations Version2.0

ホーム前へ次へ
XSLTの繰り返し・反復とは?

【Repetition / 繰り返し・反復】XSLT 2.0/XSL Transformations Version2.0/Extensible Stylesheet Language Transformations Version2.0

XSLT 2.0【Repetition / 繰り返し・反復】とは

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

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

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

<< 6. 反復 / Features of the XSLT Language

XSLT 2.0繰り返し・反復目次


7 繰り返し・反復 / Repetition

7 繰り返し・反復

<!-- カテゴリ: 命令 -->
<xsl:for-each
  select = expression>
  <!-- Content: (xsl:sort*, sequence-constructor) -->
</xsl:for-each>

そのシーケンスにあるアイテムごとに1回、 xsl:for-each 命令内でシーケンスコンストラクタを評価中に xsl:for-each 命令は、 アイテムのシーケンスにあるアイテムごとに処理されます。

select 属性が要求され、そしてそのは、入力シーケンスを呼んだシーケンスの為に評価しなければいけません。 もし、 xsl:sort 要素がある場合には、 (参照先: 13 Sorting) 入力シーケンスは、ソートしたシーケンスを作る為にソートされます。 その他のものは、ソートしたシーケンスは、入力シーケンスと同じです。

xsl:for-each 命令は、シーケンスコンストラクタを含みます。 シーケンスコンストラクタは、次に続くようなfocus/フォーカスセットを伴い、ソートしたシーケンス内でアイテムごとに1回評価されます。:

  • 文脈アイテムは、処理されているアイテムです。 もし、これが、ノードであれば、それはまた、文脈ノードとなるでしょう。 もし、それが、ノードでなければ、存在しない文脈ノードとなるでしょう : いくつかの文脈ノードを参照する試みは、 回復されない動的エラーの中で生じるでしょうという事です。

  • 文脈位置は、ソートしたシーケンスにあるこのアイテムの位置です。

  • 文脈サイズは、(入力シーケンスのサイズと同じ)ソートしたシーケンスのサイズです。

シーケンスコンストラクタを評価した入力シーケンスにある各アイテムにおいては、 アイテムのシーケンスを創出します(参照先: 5.7 シーケンスコンストラクタ)。 これらの出力シーケンスは、結合されます;もし、ソートしたシーケンスにあるアイテム Q が、アイテム P に続く場合には、 文脈アイテムとして Q を伴うシーケンスコンストラクタを評価した結果は、文脈アイテムとして P を伴うシーケンスコンストラクタを評価した結果の後で結合されます。 xsl:for-each 命令の結果は、アイテムのシーケンスが結合されます。

注釈:

XSLT 1.0では、選択したノードは、文書指定内で処理されました。 XSLT 2.0では、( path 式と union 式のような) XPath 1.0の下で有効となるであろうXPath式は、ノードのシーケンスを返すでしょう、それは、文書指定の中に既に存在し、その為、後方互換性が維持されます。

例: xsl:for-each を利用する

例えば、この構造を伴う与えられたXML文書は、

<customers>
	<customer>
		<name>...</name>
		<order>...</order>
		<order>...</order>
	</customer>
	<customer>
		<name>...</name>
		<order>...</order>
		<order>...</order>
	</customer>
</customers>

次に続くのは、 customer 要素ごとの行を伴うテーブルを含んでいるHTML文書の作成でしょう

<xsl:template match="/">
	<html>
		<head>
			<title>Customers</title>
		</head>
		<body>
			<table>
				<tbody>
					<xsl:for-each select="customers/customer">
						<tr>
							<th>
								<xsl:apply-templates select="name"/>
							</th>
							<xsl:for-each select="order">
							<td>
								<xsl:apply-templates/>
							</td>
							</xsl:for-each>
						</tr>
					</xsl:for-each>
				</tbody>
			</table>
		</body>
	</html>
</xsl:template>

8. 条件付き処理 / Conditional Processing >>


ホーム前へ次へ