最近のWindows(IE)には、XMLパーサーMSXMLが標準で入っています。これは、COMになっているので、JScript(JavaScript)やVBScriptからも簡単に使うことができます。今回のようにブラウザ上で実行する場合は、IE専用になりますが、HTAやWSHなら「Windows対応」にできるでしょう。MSXMLでは、読み込みだけではなくXML文字列の作成もできますから、XMLベースのデータ処理プログラムをスクリプトベースのアプリケーションとして作成することも可能です。
XMLの読み込みと解析
今回は、以下のようなXMLファイルをMSXMLで読み込んで解析してみます。
| jsxml.xml |
|---|
<?xml version="1.0" encoding="Shift_JIS" ?> <lib> <soft> <name>0式調画機</name> <year>2000</year> </soft> <soft> <name>ドット絵でぃた</name> <year>1997</year> </soft> <soft> <name>2式視聴機</name> <year>2002</year> </soft> </lib> |
構造としては、ルートノードlibの下に子ノードsoftがいくつかぶら下がり、各softノードがnameとyearを持っている、というものですね。
このXMLファイルを、本HTMLファイルと同じディレクトリにおいて読み込んでみましょう。
まず、最初にMSXMLオブジェクトを作成します。
var doc = new ActiveXObject("Microsoft.XMLDOM");
そして、XMLを読み込む際、処理が終わるまで次の処理を行わない(同期的に読み込む)ようにするためにasyncプロパティをfalseにしてから、xmlをload()します。
doc.async = false;
doc.load("jsxml.xml");
これで、XML文書が読み込まれたので、続いてDOMの各インターフェースでツリー構造をたどってノードを処理しましょう。
| XMLからデータを取得 |
|---|
// ルートlibの子ノード群(softノード群)取得
var lib = doc.documentElement.childNodes;
var str = "";
// 各softノードを処理
for (i = 0;i < lib.length;i++) {
// soft内のnameとyearノードの値を取得
name = lib.item(i).selectSingleNode("name").nodeTypedValue;
year = lib.item(i).selectSingleNode("year").nodeTypedValue;
// 取得した情報を文字列に保存
str = str + name + " - " + year + "\n";
}
alert(str); |
以上の処理を実際に動かしてみます。
XML作成
読み込みに続いて、今度はXMLを作ってみましょう。XMLを読み込む時は、まずルートを取得してその子ノードを辿って行きましたが、XMLを作る時もまずルートを作成し、そこに子ノードを追加していく形でやってみました。
| XML文字列作成 |
|---|
function test2() {
var doc = new ActiveXObject("Microsoft.XMLDOM");
// ルート作成
var lib = doc.createElement("lib");
doc.appendChild(lib);
// softノード作成
var soft = doc.createElement("soft");
// nameノード作成
var name = doc.createElement("name");
// nameノードにテキスト追加
name.appendChild(doc.createTextNode("BGM奏者"));
// yearノード作成
var year = doc.createElement("year");
// yearノードにテキスト追加
year.appendChild(doc.createTextNode("1999"));
// softにnameとyearを追加
soft.appendChild(name);
soft.appendChild(year);
// libにsoftを追加
lib.appendChild(soft);
alert(doc.xml);
} |
処理の流れは、単純な「要素の追加」の連続ですね。ツリー構造に沿って、親ノードを作成し、その下に追加する子ノードを作成して追加していく、という処理を繰り返して行けば、XMLの構造が作成され、その文字列を取得することができます。
HTAやWSHなら、このXML文字列をxml宣言とともにファイルに書き出せばXMLファイルを生成できるわけです。