JScriptとMSXMLによるXML処理

最近のWindowsIE)には、XMLパーサーMSXMLが標準で入っています。これは、COMになっているので、JScript(JavaScript)VBScriptからも簡単に使うことができます。今回のようにブラウザ上で実行する場合は、IE専用になりますが、HTAWSHなら「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ノードがnameyearを持っている、というものですね。

このXMLファイルを、本HTMLファイルと同じディレクトリにおいて読み込んでみましょう。

まず、最初にMSXMLオブジェクトを作成します。

  var doc = new ActiveXObject("Microsoft.XMLDOM");

そして、XMLを読み込む際、処理が終わるまで次の処理を行わない(同期的に読み込む)ようにするためにasyncプロパティをfalseにしてから、xmlload()します。

  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の構造が作成され、その文字列を取得することができます。

HTAWSHなら、このXML文字列をxml宣言とともにファイルに書き出せばXMLファイルを生成できるわけです。


プログラミング資料庫 > Windowsプログラミング研究室