« 環境の減少 | メイン | pre要素によるマーク付けについて »

2004年04月07日

MSXML with WSH で XSLT [XML]



最近は専ら Micorsoft Excel でWeb ページを編集する事が多い。もちろんそのまま『Webページとして保存』などという恐ろしい事はやらないが。XLS→CSV→XML→XHTMLと機械的に変換してくので、以前に比べて作業は格段に楽になった。


それはさておき、MSXML 3.0 で XSLT したときに


<META http-equiv="Content-Type" content="text/html; charset=UTF-16">


やら


<?xml version="1.0" encoding="UTF-16"?>


やらを一々付けてくる“おせっかい”ぶりには本当に閉口する。xml 宣言は omit-xml-declaration="yes" で消す事も可能だったが、method="html" で吐き出した時の余計な meta タグのほうはどうしようもない。仕方がないので JScirpt で物理的に文字列置換する事にした。



var objDoc = new ActiveXObject("Msxml2.DOMDocument");
var objStl = new ActiveXObject("Msxml2.DOMDocument");

var strXmlName = openDialogMenu("xml");
var strXslName = openDialogMenu("xsl");
var strHtmName = openExcelDialog();

objDoc.load(strXmlName);
objStl.load(strXslName);

objSav = objDoc.transformNode(objStl); // XSLTransform

var strCharCode = objStl.getElementsByTagName("xsl:output").item(0).getAttribute("encoding");
strXml = strXml.replace("UTF-16",strCharCode); // “UTF-18”を物理的に置換

saveTextFile(strHtmName,objSav);
WScript.Echo(strHtmName + "として変換結果を出力しました。");

function openDialogMenu(arg1){ // ファイル選択ダイアログ用関数
var ComDlg = WScript.CreateObject("MSComDlg.CommonDialog");
ComDlg.MaxFileSize = 256;
ComDlg.InitDir = ".";
ComDlg.Filter = arg1.toUpperCase() + "(*." + arg1 + ")|*." + arg1;
ComDlg.ShowOpen();
if(ComDlg.FileName.length == 0){WScript.Quit();}
return ComDlg.FileName;
}

function openExcelDialog(){ // ファイル名入力ダイアログ(Excel使用)関数
var objXL = WScript.CreateObject("Excel.Application");
var strRet = objXL.InputBox("XSLT in WHS","出力ファイル名", "output.html");
objXL.Quit();
return strRet;
}

function saveTextFile(arg1,arg2){ // テキストファイル書き出し関数
var fs = WScript.CreateObject("Scripting.FileSystemObject");
var stream = fs.CreateTextFile(arg1);
with(stream){
Write(arg2);
Close();
}
}


これが私が現在わりと利用している XSLT 用 JScript。WSH で動きます。コピー&ペーストしてテキストファイルに拡張子[.js]で保存、作成したファイルをダブルクリックして起動します。


必要な環境を一応述べておくと、



  • Microsoft Windows 98 以上

  • Microsoft Excel 98 以上

  • MSXML 3.0 以上(あるいは Internet Explorer 6.0 以上)

  • Windows Script 1.0 以上


となります。何だか某社の回し者の用な気もしますが、多分気のせいかと。


投稿者 : 00:00 | コメント (0) | トラックバック (0)

トラックバック

このエントリーのトラックバックURL:
http://totora.jpn.org/mt/mt-tb.cgi/283

コメント

コメントしてください




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)