xslt1.js
最終更新:2009/11/21
001: // WSH で MSXML.DOMDocument オブジェクトを使って 002: // XSLT 変換するサンプル 003: // 004: // 概要:in_file を xsl_file で XSLT 変換して out_file に保存 005: // 006: // メモ:xsl:out の encoding 通りの出力にならない。何故か UTF-16 固定となる。 007: 008: var USAGE = "Usage: xslt1.js xsl_file in_file out_file"; 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()<3) { 061: WScript.Echo(USAGE); 062: WScript.Quit(1); 063: } 064: 065: var xslFile = WScript.Arguments(0); 066: var inFile = WScript.Arguments(1); 067: var outFile = WScript.Arguments(2); 068: 069: var srcDom = null; 070: var xslDom = null; 071: 072: try { 073: 074: // DOM オブジェクトの生成 075: srcDom = new_dom(inFile); 076: xslDom = new_dom(xslFile); 077: 078: // XSLT 変換 079: var resultText = srcDom.transformNode(xslDom); 080: 081: // ファイルに結果を出力 082: saveTextToFile(resultText, outFile); 083: 084: // srcDom.save(outFile); // ←xsl:output で出力を html にする場合、エラーになる。 085: 086: WScript.Echo(outFile + " に保存しました。"); 087: 088: } catch (e) { 089: 090: error_flag = 1; 091: var error_msg = e.toString(); 092: if (e.number && e.description) { 093: error_msg += "\n"+ Number(e.number & 0xffff).toString() 094: + ": " + e.description; 095: } 096: WScript.Echo(error_msg); 097: 098: } finally { 099: if (srcDom) { 100: WScript.DisconnectObject(srcDom); 101: srcDom = null; 102: } 103: if (xslDom) { 104: WScript.DisconnectObject(xslDom); 105: xslDom = null; 106: } 107: WScript.Quit(error_flag); 108: } 109: }
KAKU PROJECT (2009) |