xpath1.js

最終更新:2009/11/21

xpath1.js

001: // WSH で MSXML.DOMDocument オブジェクトを使って
002: // XPath を使用するサンプル
003: // 
004: // 概要:in_file を XPath の式 expr で検索して表示
005: //
006: // メモ:position() が使えない。。。
007: 
008: var USAGE = "Usage: xpath1.js in_file expr";
009: 
010: main();
011: 
012: // DOM オブジェクトを作る関数
013: // 返り値:
014: //  fileName が示す XMLファイルをパースして得られたDOMオブジェクト。
015: //  fileName が null の時は空の DOM オブジェクト。
016: // 例外:
017: //  パースに失敗した場合は例外を投げる。
018: 
019: function new_dom(
020:   fileName //  入力XMLファイル名
021: ) {
022:   var dom = null;
023:   if (fileName != null) {
024:     dom = WScript.CreateObject('MSXML.DOMDocument');
025:     dom.async = false;
026:     dom.load(fileName);
027:     if (dom.parseError.errorCode != 0) {
028:       var myErr = dom.parseError;
029:       throw("Parse error: " + fileName + " : line[" + myErr.line + "] "
030:         + myErr.reason);
031:     }
032:   }
033:   return dom;
034: }
035: 
036: // テキストデータをファイルに保存する関数
037: // メモ:
038: //   バイナリ(unsigned char の配列等)の保存には対応していない。
039: 
040: function saveTextToFile (
041:   textData   // テキストデータ(文字列)
042:   , fileName // 保存先ファイル名
043: ) {
044:   var oAdoDb = WScript.CreateObject("ADODB.Stream");
045:   oAdoDb.type = 2; // 1:binary, 2:text//
046:   oAdoDb.open();
047:   oAdoDb.writeText(textData); // write:binary, writeText:text //
048:   oAdoDb.saveToFile(fileName, 2);
049:   oAdoDb.close();
050:   WScript.DisconnectObject(oAdoDb);
051:   oAdoDb = null;
052: }
053: 
054: // メインルーチン
055: function main () {
056: 
057:   var error_flag = 0;
058: 
059:   // 引数のチェック
060:   if (! WScript.Arguments || WScript.Arguments.Count()<2) {
061:     WScript.Echo(USAGE);
062:     WScript.Quit(1);
063:   }
064: 
065:   var inFile  = WScript.Arguments(0);
066:   var expr = WScript.Arguments(1);
067: 
068:   var srcDom = null;
069: 
070:   try {
071: 
072:     // DOM オブジェクトの生成
073:     srcDom = new_dom(inFile);
074: 
075:     // XSLT 変換
076:     var nodes = srcDom.documentElement.selectNodes(expr);
077: 
078:     // 結果を表示
079:     WScript.Echo("Result: " + nodes.length + " nodes\n");
080:     for (var i=0; i < nodes.length; i++) {
081:       WScript.Echo(nodes.item(i).xml + "\n");
082:     }
083:   } catch (e) {
084: 
085:     error_flag = 1;
086:     var error_msg = e.toString();
087:     if (e.number && e.description) {
088:       error_msg += "\n"+ Number(e.number & 0xffff).toString()
089:        + ": " + e.description;
090:     }
091:     WScript.Echo(error_msg);
092: 
093:   } finally {
094:     if (srcDom) {
095:       WScript.DisconnectObject(srcDom);
096:       srcDom = null;
097:     }
098:     WScript.Quit(error_flag);
099:   }
100: }
Copyright (C) KAKU PROJECT (2009)KAKU PROJECT (2009)