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


XSLファイルを強化する

 ファイルメーカーProが送出する検索結果のXMLファイルには、実に様々な情報が埋め込まれています。例えば<ROW>タグには、該当するレコードのレコードIDがRECORDID属性として、<FMPDSORESULT>の直下<DATABASE>タグには、使用しているデータベースファイル名が、<FMPDSORESULT>の直下<LAYOUT>には使用しているレイアウト名が埋め込まれています。次は、検索結果のページにこれらの情報も表示するようにXSLファイルを書き換えましょう。

レコードIDを表示する

 ファイルメーカーProは、全てのレコードにレコードIDという固有の番号を割り振っています。この番号は、データベース内でダブることがないように自動的に割り振られて、変更されることは絶対ありません。ですからレコードIDは、レコードを特定するのに有効です。まったく同じ内容のレコードが2つ以上あっても、レコードIDで区別することができます。FMPDSORESULT文法のXMLデータにも各ROW要素の属性値にレコードIDが出力されています。RECORDID属性がそれです。検索結果のテーブルに、このレコードIDの値も表示するように、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" />
				</table>
			</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>

 24行目の<xsl:value-of select="@RECORDID"/>で、ROW要素のRECORDID属性の値を取り出しています。この行は、ROW要素に関して変換処理を実行しているテンプレート内なので、@RECORDIDは(ROW要素の)RECORDID属性の値という意味になります。@を使うことで、該当要素の属性を取り出すことができるのです。

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

 検索結果のテーブルにレコードIDが追加されました。

使用しているデータベース名とレイアウト名を表示する

 さらに、DATABASE要素に記録されているデータベース名と、LAYOUT要素に記録されているレイアウト名を、検索結果に表示するように、XSLファイルを書き換えましょう。要素の値を取り出すには<xsl:value-of select="・・・"/>を使います。検索結果の表の下に、リスト形式を使って表示します。

「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" />
				</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>

 <xsl:value-of select="DATABASE" />と<xsl:value-of select="LAYOUT" />で、それぞれデータベース名とレイアウト名をXMLデータから取り出しています。これらが記述されている階層は、match="FMPDSORESULT"(第1階層)のすぐ下であることを確認しておきましょう。それでは、このXSLファイルを使ってXMLデータをレイアウトすると、次のようになります。

 いかがでしょうか。XSLを使って、XMLデータから目的のデータを抜きだし、レイアウトする方法の概要がつかめたでしょうか。>>