最近の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ファイルを生成できるわけです。