ファイルメーカー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データから目的のデータを抜きだし、レイアウトする方法の概要がつかめたでしょうか。>>