ash | サーバ構築 | Linux | ホームページ作成 | プログラム | その他

XMLとスクリプトについて

スクリプトとは

 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>


Copyright (C)1998-1999 ASH multimedia lab.
mail : wmaster@ash.or.jp