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操作。
- nodeName : http://www.openspc2.org/reibun/JavaScript_technique/sample/06_DOM/010/index.html
- 住所録のデータを一人づつポップアップウィンドウに表示するサンプル : http://ash.jp/xml/wsh/index.htm
- nodeType一覧 : http://allabout.co.jp/internet/javascript/closeup/CU20040307/
使い方:
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
のように結果が出力される。