スポンサーリンク

WSH/JScriptで,XMLを読み込みする (コマンドラインからDOM操作)


WSHで,XMLをパースする。

設定ファイルから情報を抽出したりできる。


ここでは,下記のページに載っている build.xml を解析してみよう。

Antを使う … 簡単なJava用ビルドファイルを記述する
http://www.jajakarta.org/ant/ant-1.6....

サンプルコード

xml_read.js

var file_path = "build.xml";

// ファイル読み込み
var xml = WScript.CreateObject("MSXML.DOMDocument");
xml.load( file_path );

// DOM操作
var nodes;
var node;


WScript.Echo("プロパティを列挙します。");
nodes = xml.getElementsByTagName("project")[0]
	.getElementsByTagName("property");
for( var i = 0; i < nodes.length; i ++ )
{
	node = nodes[i];
	var prop_name = node.getAttribute("name");
	var prop_value = node.getAttribute("value")
		 || node.getAttribute("location");
	
	// name=valueの形式で表示
	WScript.Echo( prop_name + " = " + prop_value );
}


WScript.Echo("ターゲットを列挙します。");
nodes = xml.getElementsByTagName("project")[0]
	.getElementsByTagName("target");
for( var i = 0; i < nodes.length; i ++ )
{
	node = nodes[i];
	
	// ターゲットに含まれる全タスクを取得
	var target_name = node.getAttribute("name");
	var tasks = [];
	for( var j = 0, len = node.childNodes.length; j < len; j ++ )
	{
		// コメントノード等はタスクではないので飛ばす
		if( node.childNodes[ j ].nodeType != 1 )
		{
			continue;
		}
		
		// このタスクのノード名を取得
		var task_node = node.childNodes[ j ];
		tasks.push( task_node.nodeName );
	}
	WScript.Echo( 
		"ターゲット「" 
		+ target_name 
		+ "」に含まれるタスク:" 
		+ tasks.join(",") 
	);
}

概説:

MSXML.DOMDocumentを呼び出したら,あとは普通のDOM操作。

使い方:

build.xmlと同じフォルダ上で上記のスクリプトをダブルクリックするだけ。

もしくは,コマンドプロンプトから実行した場合は

D:\temp>cscript //nologo xml_read.js

プロパティを列挙します。
src = src
build = build
dist = dist
ターゲットを列挙します。
ターゲット「init」に含まれるタスク:tstamp,mkdir
ターゲット「compile」に含まれるタスク:javac
ターゲット「dist」に含まれるタスク:mkdir,jar
ターゲット「clean」に含まれるタスク:delete,delete

のように結果が出力される。