xslt1.js

最終更新:2009/11/21

xslt1.js

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: }
Copyright (C) KAKU PROJECT (2009)KAKU PROJECT (2009)