XML上では、スクリプトとして、JavaScriptや、VBScriptなどが使えます。
スクリプトを使うと、応用範囲は広がります。
だだ、Microsoftの独自拡張の部分が多いです。
このページのサンプルでは、IE5.0とJavaScriptを使っています。
その他の環境では動作確認はしていません。
請求書は、利用したり購入した商品の単価と数量から金額を求め、その商品の合計金額を求めて表示します。
ですから、金額と合計金額は、スクリプトを使って計算する必要があります。
以下のXMLデータを使って、請求書を作成してみましょう。
| seikyu.xml |
|---|
<?xml version="1.0" encoding="ISO-2022-JP" ?> <?xml:stylesheet type="text/xsl" href="seikyu.xsl" ?> <請求> <利用> <年月>2000/01/10</年月> <商品コード>PC-0001</商品コード> <商品名>マウスパッド</商品名> <数量>2</数量> <単価>500</単価> </利用> <利用> <年月>2000/01/13</年月> <商品コード>PC-0003</商品コード> <商品名>タブレット</商品名> <数量>1</数量> <単価>12000</単価> </利用> </請求> |
IE5.0のスクリプト機能では、scriptで定義し、evalで呼び出します。
処理は、単価と数量を表示するときに、その値を変数に代入しておきます。
そして、金額を表示するときに、単価*数量を計算し、その値を取り出します。
また、合計金額を表示するために、合計金額も累計しておき、最後に合計金額を取り出します。
では、XMLスタイルシートにスクリプトを定義してみましょう。
| seikyu.xsl |
|---|
<?xml version="1.0" encoding="ISO-2022-JP" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<h1>請求書</h1>
<table border="1">
<tr>
<th>利用年月</th>
<th>商品コード</th>
<th>商品名</th>
<th>数量</th>
<th>単価</th>
<th>金額</th>
</tr>
<xsl:apply-templates select="請求/利用"/>
<tr>
<th colspan="3"></th>
<th colspan="2">合計金額</th>
<td><xsl:eval>getGoukei()</xsl:eval></td>
</tr>
</table>
</xsl:template>
<xsl:template match="利用">
<tr>
<td><xsl:value-of select="年月"/></td>
<td><xsl:value-of select="商品コード"/></td>
<td><xsl:value-of select="商品名"/></td>
<td><xsl:apply-templates select="数量"/></td>
<td><xsl:apply-templates select="単価"/></td>
<td><xsl:eval>getKingaku()</xsl:eval></td>
</tr>
</xsl:template>
<xsl:template match="数量">
<xsl:eval>setSuu(this.text)</xsl:eval>
</xsl:template>
<xsl:template match="単価">
<xsl:eval>setTanka(this.text)</xsl:eval>
</xsl:template>
<xsl:script>
suu = 0; tanka = 0;
kingaku = 0; goukei = 0;
function setSuu(parm) {
suu = parseInt(parm);
return(suu.toString());
}
function setTanka(parm) {
tanka = parseInt(parm);
return(tanka.toString());
}
function getKingaku() {
kingaku = tanka * suu;
goukei = goukei + kingaku;
suu = 0; tanka = 0;
return(kingaku.toString());
}
function getGoukei() {
return(goukei.toString());
}
</xsl:script>
</xsl:stylesheet>
|
スクリプトを定義する場合は、xsl:scriptタグの中で、functionとして定義します。 パラメータは文字列型変数となります。 suuは、数字型変数ですから、parseIntメソッドを使って数字に変換して代入します。 returnで返却した値が表示されるので、文字列型変数に変換して返却します。 このようにして、スクリプトを定義します。
| スクリプトの定義の例 |
|---|
<xsl:script>
suu = 0;
function setSuu(parm) {
suu = parseInt(parm);
return(suu.toString());
}
|
スクリプトを呼び出す場合は、xsl:evalタグの中で、関数名とパラメータを指定します。 thisは、その定義されているテンプレート自身のオブジェクトを表し、textは、そのテンプレートの値(value-ofの値)を表します。 ですから、この場合は、XMLデータの数量タグの値を表しています。 このようにして、スクリプトを呼び出します。
| スクリプトの呼び出しの例 |
|---|
<xsl:eval>setSuu(this.text)</xsl:eval> |