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 はここ。 |