集中連載:IISでXMLを操作する
第3回 サーバサイドでのXML文書処理

 VBScriptのプログラム解説

 では、テストサイトに載せるサンプルプログラムを紹介していきましょう。ここではXML文書は、前回作成した「個人情報」のXML文書とスタイルシートを使用します。XML文書とスタイルシートの詳細については前回の記事を参照してください。今回は、ASPに焦点を絞って説明していきます。

 ASPのスクリプトは、<% と %> で囲まれた中に記述します。このスクリプトとHTMLタグなどを組み合わせて記述することで、ASPファイルは構成されています。スクリプトを記述する言語としては、VBScript(Visual Basic Scripting Edition)とJScript(マイクロソフト仕様のJavaScript)があります。今回は、VBScriptを使用して記述します。

   サンプルASPファイルの用意と説明

 ASPでサーバサイドのスクリプトを記述する場合、必ずファイルの先頭で使用するスクリプト言語を指定します。この言語指定は、1ページに1回だけ記述できます。つまり、1ファイル内で使用できるスクリプト言語は1種類のみとなります。複数の言語を使用したい場合は、ファイルを分割しなければなりません。

 今回はVBScriptを使用するのでスクリプトの言語指定は下記のようになります。

<%@ Language="VBScript" %>

 ここからはHTMLタグの記述になっています。ヘッダ情報に、文字コードの指定やタイトルを記述しています。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!-- ヘッダ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<!-- ページタイトル -->
<title>個人情報</title>
</head>
<!-- ボディ -->
<body>

 ここからが、実際に表示するための情報を作成しているスクリプトの記述になります。コメントとして記述しているようにDOMを使って、XML文書とスタイルシートを読み込んで適用しています。DOMの記述については、次項で説明します。

 まずはオブジェクトを格納する変数を作成します。XML文書とスタイルシートを格納する2つの変数を作成します。そして、Person.xmlファイルを読み込むためのDOMオブジェクトを作成し、Person.xmlファイルを読み込んでいます。

<%
Dim objXML, objXSL
// XMLファイル(個人情報)の読み込みオブジェクトを作成
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.async = false
// XMLファイル(個人情報)を読み込み
objXML.load(Server.MapPath("Person.xml"))

 次に、Person.xslファイルを読み込むためのDOMオブジェクトを作成し、Person.xslファイルを読み込んでいます。

// XSLファイルの読み込みオブジェクトを作成
Set objXSL = Server.CreateObject("Microsoft.XMLDOM")
objXSL.async = false
// XSL ファイルを読込み
objXSL.load(Server.MapPath("Person.xsl"))

 Person.xmlにPerson.xslを適用して結果をWebブラウザに送り、スクリプトを閉じます。最後はHTMLとしての終了タグを記述して終わりです。

// 個人情報表示
Response.Write(objXML.transformNode(objXSL))
%>
</body>
</html>

 これをPerson.aspと名前を付けて保存します。

 ここまで見て分かるように、スクリプトとして記述している部分は非常に少なく、しかも簡単です。これだけの記述で、XML文書のサーバ処理という目的を達成できるのです(Person.asp: サーバサイドスクリプトが記述されているファイル)。

   使用しているDOMのメソッドの説明

 今度は、プログラムの中で使われているDOMについて簡単に説明しましょう。

 DOMは、XML文書の要素や属性などXML文書を構成している各ノードを操作するためのオブジェクトの集まりです。DOMを介することで、自由にXML文書を操作できるようになります。今回はDOMの詳細には触れませんが、先ほどのサンプルプログラムに出てきたDOMの基本的な使い方と、この連載で使用しているDOMのオブジェクトやメソッドについて説明します。記述は、ASPでの記述例となっています。

 XML文書を操作するためには、まずDOMDocumentオブジェクトを作成します。オブジェクトの作成時は何も入っていなくて器のみですが、ここにXML文書を読み込むことで要素や属性などのXMLのノードを操作することが可能となります。

 ASPでのDOMDocumentの作成は、Server.CreateObject() を使い、引数として作成するオブジェクトのプログラムIDを指定します。サンプルプログラムでは、Microsoft.XMLDOMという名前を指定しています。この記述自体はDOMの記述ではなくASPのオブジェクト作成の記述ですが、DOMを操作するためには重要な記述であるためここで説明しています。

Set objXML = Server.CreateObject("Microsoft.XMLDOM")

 今回の記事で使用しているDOMの記述は、XML文書とスタイルシートを読み込んでXML文書にスタイルシートを適用し、Webブラウザに表示する処理です。一連の処理で使用されているメソッドについて説明します。

 まずは、XML文書をローカルディスクから読み込む場合の指定です。今回使用しているマイクロソフトのXMLパーサは、デフォルトでは非同期で読み込むようになっているので、同期読み込みをするように変更します。XML文書をインターネットで処理する場合、非同期にしているとXML文書の読み込みが完了していない場合エラーになってしまうので、それを防止するために同期に変更しています。

objXML.async = false

 次に、実際にファイルを読み込むメソッドについて説明します。ローカルディスクに保存されているファイルを読み込む場合は、loadメソッドを使用します。パラメータに読み込むファイル名を指定します。

objXML.load("Person.xml")

 DOMDocumentオブジェクトに読み込まれたXML文書にスタイルシート(XSL)を適用するには、transformNodeメソッドを使用します。パラメータに、適用するスタイルシートのオブジェクトを指定します。

objXML.transformNode(objXSL)

 これで、XML文書にスタイルシートを適用することができました。

   WebブラウザにHTMLを送出する

 すべての準備が整ったので、クライアントからアクセスして結果を確認してみましょう。ここでもIEとNetscapeを使って、それぞれの表示結果を比較します。まずは、前回スタイルシートを適用するように修正を加えたXML文書を表示してみます。IEを起動してアドレスに

http://localhost/XML/Person1.xml

と入力します。またNetscapeを起動して、同様にアドレスを入力します。この場合、Webブラウザには(変換前の)XML文書がそのまま送られるため、結果は、前回と同じようにそれぞれのWebブラウザで異なった表示になります。

 そこで今度は、先ほど作成したASPファイルをURLに指定してみます。IEのアドレスに http://localhost/XML/Person.asp と入力します。IEの場合、XML文書を指定したときと変わらない、表としてフォーマットされた結果になります(画面9)。IEの場合は、Webブラウザ上でXML文書にスタイルシートが適用されていたので、それをサーバ上で行っても、見かけは同様の結果になるわけです。

画面9 Person.aspをIEでアクセスした結果

 一方のNetscapeでも、今度はIEと同様に、XML文書にスタイルが整えられて表示されるようになりました(画面10)。

画面10 Person.aspをNetscapeでアクセスした結果

 このようにASPを使ってXML文書をサーバサイドで処理し、結果としてHTMLをクライアントに渡すようにすれば、クライアントのWebブラウザに依存することなくほとんど同一の表示結果を提供することが可能となります。

 今回はIISとASPを使用しましたが、ほかのWebサーバ環境でも同様の処理が可能です。例えばCGIやJava環境のJSPなども、選択肢の1つとして挙げられます。

 

Index
集中連載:IISでXML文書を扱う方法
第3回 サーバサイドでのXML文書処理
  XML文書を変換するサンプルを作る
・サーバで変換すれば問題は解決する
・ASPのテストサイトを作る手順
VBScriptのプログラム
・サンプルASPファイルの用意と説明
・使用しているDOMのメソッドの説明
・WebブラウザにHTMLを送出する


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間