ファイルメーカーProのページへ戻る


XSLファイルを強化する〜特定の範囲のレコードだけを表示する

 該当レコードのうち1〜5番目だけを表示する方法を考えましょう。ROW要素の初めから5個を表示する方法です。これはROW要素を変換処理する際に、ROW要素の順番を評価して、5番目までなら処理する。6番目以降は無視する。という評価式を組み込みます。

出現順番の評価
<xsl:apply-templates select="ROW[index()$ge$0 and index()$le$4]" />

 select="〜"で、変換処理する要素を指定するわけですが、ROWのあとに[ ]が付いています。[ ]は評価式をあらわします。評価式に適合するROW要素だけがテンプレートでの処理の対象になるわけです。評価式の中を見てみましょう。

 「index()」は出現順を表わす関数です。順番は0から始まります。最初のROW要素はindex()=0です。「ROW[index()$ge$0」は出現順が0以上「index()$le$4]」は出現順が4以下であることを表わし、これらを$and$で結合することで、「出現順が0以上かつ4以下であるROW要素」ということになります。こうすることで、ROW要素の1番目から5番目までがテンプレート処理の対象になります。これを組み込んだXSLファイルは次のようになります。

ROW要素の1〜5番目までを表示するためのXSLファイル「result.xsl」
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" xmlns:fm="http://www.filemaker.com/fmpdsoresult" xml:lang="ja">
<xsl:template><xsl:apply-templates/></xsl:template>
<xsl:template match="text()"><xsl:value-of select="."/></xsl:template>

	<xsl:template match="FMPDSORESULT">
		<html>
			<head><title>検索結果</title></head>
			<body>
				<table border="1">
					<tr><th>商品名</th><th>OS</th><th>価格</th><th>色</th><th>レコードID</th></tr>
					<xsl:apply-templates select="ROW[index()$ge$0 and index()$le$4]" />
				</table>
				<ul>
					<li>使用データベース:<xsl:value-of select="DATABASE"/></li>
					<li>使用レイアウト:<xsl:value-of select="LAYOUT"/></li>
				</ul>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="ROW">
		<tr>
			<td><xsl:value-of select="name" /></td>
			<td><xsl:value-of select="os" /></td>
			<td><xsl:value-of select="price" /></td>
			<td><xsl:value-of select="color" /></td>
			<td><xsl:value-of select="@RECORDID" /></td>
		</tr>
	</xsl:template>

</xsl:stylesheet>

 このresult.xslを使ってXMLデータをレイアウトすると次のようになります。

 検索結果の中から、はじめの5つだけが表示されました。

 評価式でよく使う比較演算子類をまとめると以下になります。

構文 説明
$and$ かつ
$or$ または
$not$ ではない
$eq$ 等しい
$ieq$ 等しい(大文字小文字を区別する)
$ne$ 等しくない
$ine$ 等しくない(大文字小文字を区別する)
$lt$ より小さい
$ilt$ より小さい(大文字小文字を区別する)
$le$ 小さいか等しい
$ile$ 小さいか等しい(大文字小文字を区別する)
$gt$ より大きい
$igt$ より大きい(大文字小文字を区別する)
$ge$ 大きいか等しい
$ige$ 大きいか等しい(大文字小文字を区別する)
$all$ 全て
$any$ どれか一つ

 これらを使って[ ]中に評価式を作ることで、変換対象の要素をさらに限定することができるのです。>>