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