FileMaker XSLT 拡張関数と引数の使用
3. スタイルシートの内部で拡張関数を使用します。
次の例で、XPath ステートメントを使用して拡張関数を呼び出す方法を示します。
この1番目の例では、フォントの色を緑("#009900")に設定します。
<font color= {fmp-ex:getValueColor(50)} >値は 50 です</font>
この2番目の例では、フォントの色を赤("#CC0000")に設定します。
<font color= {fmp-ex:getValueColor(-500)} >値は -500 です</font>
拡張関数の例
上記の処理で使用される簡単な JavaScript 関数は、<xsl:choose> ステートメントを使用して実装できたと思われます。
スクリプト拡張を使用する本当の利点は、XSLT や XPath だけでは実装できない関数を作成できることです。
たとえば、ユーザ所属の企業用の内部ポータルサイトを構築し、そのポータルページで現在の株価情報を載せるとし ます。XML ストックフィードを使用できますが、これらへのアクセスには一般的に、商用ライセンスが必要です。
ただし、Yahoo! Web サイトからコンマ区切り値(CSV)ドキュメント形式で株価データをダウンロードすることが できます。XPath document() 関数では、XML ソースからコンテンツをインポートできますが、CSV コンテンツを XML に変換する必要があります。1つの解決策として、JavaScript を使用して CSV の株価情報をダウンロードし、
そのファイルを解析してデータを抽出する方法があります。
次の URL は、Yahoo! Web サイトから CSV ファイルとして株価情報を取得するための構文を示します。
http://quote.yahoo.com/d/quotes.csv?s=<ティッカ>&f=l1gh&e=.csv
ここで、<ティッカ> は、データを取得しようとする株式コードを示します。
返されるデータは、次のようなコンマ区切りの3つの数字です。
31.79,31.17,32.12
ここで1番目の値は最後の取引価格であり、2番目の値はその日の最低価格であり、3番目の値はその日の最高価格 です。
次の例では、現在の株価情報を Yahoo! Web サイトから取得してこれを XPath 関数を介して使用可能にさせる JavaScript XSLT 拡張関数を示します。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
exclude-result-prefixes="xsl fmxslt fmrs xalan fmp-ex"
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fmrs="http://www.filemaker.com/xml/fmresultset"
xmlns:fmxslt="xalan://com.fmi.xslt.ExtensionFunctions"
xmlns:xalan="http://xml.apache.org/xslt"
xmlns:fmp-ex="ext1"
>
<?xslt-cwp-query params="-grammar=fmresultset&-process" ?>
<xsl:output method="html"/>
<xalan:component prefix="fmp-ex" functions="include get_quote" >
<xalan:script lang="javascript">
function include(url) {
var dest = new java.net.URL(url);
var dis = new java.io.DataInputStream(dest.openStream());
var res = "";
while ((line = dis.readLine()) != null) {
res += line + java.lang.System.getProperty("line.separator");
} dis.close();
return res;
}
function get_quote(ticker) {
url = "http://quote.yahoo.com/d/quotes.csv?s=”+
"+ticker+"&f=l1gh&e=.csv";
csv_file = include(url);
var str_tokenizer = new java.util.StringTokenizer(csv_file, ',');
// the first token is the last trade price var last = str_tokenizer.nextToken();
return last;
}
</xalan:script>
</xalan:component>
<xsl:template match="/fmrs:fmresultset">
<html>
<body>
<font size="2" face="verdana, arial">
Apple 株価:<xsl:value-of select="fmp-ex:get_quote('AAPL')"/>
</font>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
第 6 章
|
FileMaker XSLT スタイルシートの開発 71Web 公開エンジンがこのスタイルシートを処理するときには、Yahoo! Web サイト からの株価情報が必要です。
get_quote() 関数によって、株価情報のデータが解析され、そのデータがスタイルシートに返されます。変換された出 力が、ブラウザに表示されます。