このページのサンプルでは、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> |