option explicit
conv "link.xml", "link.xsl", "link.html"
sub conv(xmlpath, stylesheetpath, htmlpath)
dim xmldoc, stylesheet, result, str, F_IN, FS, F_OUT
set FS=createobject("Scripting.FileSystemObject")
set F_IN=FS.GetFile(xmlpath)
set F_OUT=FS.CreateTextFile(htmlpath, 1)
set xmldoc=createobject("MSXML2.DomDocument")
xmldoc.async=false
xmldoc.load(xmlpath)
set stylesheet=createobject("MSXML2.Domdocument")
stylesheet.async=false
stylesheet.load(stylesheetpath)
str = xmldoc.transformNode(stylesheet)
str=okikae(str, "UTF-16", "Shift_JIS")
str=okikae(str, "&", "&")
str=okikae(str, "<br/>", "<br />")
F_OUT.Write str
F_OUT.Close
end sub
function okikae(inp_str, org, dest)
dim n
if len(org)=0 then okikae=inp_inp_str:return
n=instr(1, inp_str, org)
do while n>0
inp_str=left(inp_str,n-1) & dest & mid(inp_str, n+len(org))
n=instr(1, inp_str, org)
loop
okikae=inp_str
end function
同様のものを Perlスクリプトで書くと、こんな感じ。このスクリプトの最後の方には
出力されるhtmlファイルのタイムスタンプをソースのxmlファイルのタイムスタンプに
あわせるコードを付け加えてみた。
&conv("link.xml", "link.xsl", "link.html");
sub conv{
my($xmlpath, $stylesheetpath, $htmlpath)=@_;
my($xmldoc, $stylesheet, $str, $n);
$xmldoc=$WScript->CreateObject("MSXML2.DomDocument");
$xmldoc->{async}=0;
$xmldoc->load($xmlpath);
$stylesheet=$WScript->CreateObject("MSXML2.DomDocument");
$stylesheet->{async}=0;
$stylesheet->load($stylesheetpath);
$str=$xmldoc->transformNode($stylesheet);
$str=~s/UTF-16/Shift_JIS/; # transformNodeメソッドが勝手に UTF-16 と書いてくれるので修正
$str=~s/&/&/ig;
$str=~s"<br/>"<br />"ig;
open(F_OUT, ">$htmlpath")||die "Cannot write $htmlpath";
print F_OUT $str;
close(F_OUT);
$tsrc= time()-(-M $xmlpath)*24*3600; # この2行で出力ファイルのタイムスタンプを
utime $tsrc, $tsrc, $htmlpath; # 入力ファイルのタイムスタンプにあわせている。
}
| 時間割表(jikan.lzh) |
xml で時間割を作ってみました。ソースを見るとメンテナンスが楽なのが分かると思います。(とっても単純だけど、学校関係者には役立つかもしれません。font 関係のところは必要に応じて修正して下さい。) その xsl はここ。 |