xpath1.js
最終更新:2009/11/21
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: }
![]() | KAKU PROJECT (2009) |