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) |