連載
» 2001年04月17日 00時00分 公開

VBScriptでXMLプログラミング(3):XSL/XSLTを利用したデータの変換と整列 (4/4)

[西谷亮,マイクロソフト株式会社 ]
前のページへ 1|2|3|4       

データの変換を実装する

 ここまでの準備が整ったら、あとはVB Scriptで変換のためのロジックを実装すれば、すべては完了です。

 では、以下のような流れで変換ロジックを記述します。

  • 元のXML文書を読み込んでおく
  • stylesheet1.xslの情報に基づいて、書籍名順にソートし、データを保存
  • 変換されたデータを用いて、2200円以下の書籍だけを列挙(stylesheet2.xslに基づく)し、データとして保存

 早速、VB Scriptのコードを記述していくことにしましょう。

'利用する変数をあらかじめ用意し、DOMDocumentオブジェクトの
'インスタンスを生成しておきます
Set Source = CreateObject("Msxml2.DOMDocument")
Set stylesheet = CreateObject("Msxml2.DOMDocument")
Set stylesheet2 = CreateObject("Msxml2.DOMDocument")
Set result = CreateObject("Msxml2.DOMDocument")
Set result2 = CreateObject("Msxml2.DOMDocument")


'同期的に扱いますのでasyncプロパティをFalseにセットし
'load メソッドでXML文書をメモリ上にロードしておきます
Source.async = False
Source.Load "sample.xml"

'XSLTを利用したコードも同様にあらかじめDOMDocumentオブジェクトを利用して
'メモリ上へ展開しておきます
stylesheet.async = False
stylesheet.Load "stylesheet1.xsl"
stylesheet2.async = False
stylesheet2.Load "stylesheet2.xsl"

'以下のresult,result2というオブジェクトは、変換した結果を格納するための
'オブジェクト(DOMDocumentオブジェクトのインスタンス)として用意してあります
result.async = False
result.validateOnParse = True
result2.async = False
result2.validateOnParse = True


'transformNodeToObjectメソッドによってXSLTに基づいた変換を実行しています
Source.transformNodeToObject stylesheet, result
'saveメソッドによって変換結果をファイルに保存しています
result.save "result.xml"

'変換対象は異なりますが、同様の処理を繰り返しています
result.transformNodeToObject stylesheet2, result2
result2.save "result2.xml"
リスト6 変換を実装したコード(SampleX.vbs
※ コードを単純化するために変数の宣言やインスタンスの解放は行っていません。

 基本的なコードの流れは、いままでのとおりです。

  • CreateObjectの命令によってDOMのインスタンスを生成しておきます
  • 必要なXML文書やXSLTのコードをloadメソッドによってロードしておく
なお、コード内に詳細の解説をコメントとして記述してありますので、あわせて参考にしてください。

 実際に変換の作業を行っていくには、2つのメソッドが用意されています。ここでは、ファイルとして保存することを前提にしていますので「transformNodeToObject」というメソッドを利用しています。これによって、変換された結果をDOMのドキュメントとしてメモリ上にロードしておくことが可能です。もし、単純に文字列として結果を表示するだけであれば、「transformNode」というメソッドを用いることで変換した結果を戻り値として受け取ることができます。

 ここで、おのおののメソッドの利用方法を整理しておきます。

< transformNodeToObject メソッドの書式>
  oXMLDOMNode.transformNodeToObject(stylesheet, outputObject)
    oXMLDOMNode 変換対象となるXML文書の格納された変数
    stylesheet スタイルシートがロードされているDOMDocumentオブジェクト
    outputObject 出力結果を格納するDOMDocumentオブジェクト
         
< transformNode メソッドの書式>
  strValue = oXMLDOMNode.transformNode(objStylesheet)
    strValue 戻り値を文字列として格納するため変数
    oXMLDOMNode 変換対象となるXML文書の格納された変数
    objStylesheet スタイルシートがロードされているDOMDocumentオブジェクト

 このサンプルアプリケーションでは、単純にファイル名を固定化し、読み込んでおくことで変換処理を実現していますが、実際のソリューションなどを考えると、この方法はファイルの固定化が前提となってしまうので、ベターですがベストではありません。この例はスクリプトを利用しているサンプルですので、拡張することを考えると、実行時のパラメータとしてXSLファイルを渡すことで動的な変換を行うような方法がよいでしょう。また、通常のVisual BasicやScripting Component(*1)などを用いてCOMコンポーネントとして生成しておくのであれば、プロパティやメソッドの引数としてファイル名を取得するようにすれば、柔軟性を得ることができるでしょう。

 ともあれ、XSLTを利用したドキュメントの変換は単にいろいろな形式に変換することができるというだけではなく、これまで説明してきたようにXMLの持つ柔軟性を最大限に発揮するための重要な機能であると位置付けることができます。

*1:Scripting Component

スクリプト自身をコンポーネントとして扱う方法。拡張子.wscとして必要なシンタックスを追加すると、コンポーネントと同じように扱うことができます。


 今回は、XSLTによるデータ変換に焦点を絞って解説をしてまいりました。XML文書を使用して得られるメリットには、さまざまなものがあります。ぜひ最大限に得られるように、いろいろな工夫をアプリケーションの中に取り入れていっていただければ幸いです。

 次回は、今回紹介したドキュメント変換を応用した形で、ユーザーインターフェイスの生成を考えていくことにしましょう。XML文書を単純に表示させると、ツリーしか表示されません。しかし、今回紹介したテクノロジを応用することで、ユーザーインターフェイスを生成し、見た目のよいページを構成することができます。もちろん、XMLの特性を残したままに。

 では、どのように実装していったらいいのか。次回をお楽しみに。

筆者紹介

マイクロソフト株式会社
デベロッパー・マーケティング本部 .NETテクノロジー部
テクニカルエバンジェリスト

西谷亮



前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。