xsl:outputでencoding="Shift_JIS"を指定しているのに、結果ツリーのXML宣言に反映されない。ならDOM操作で直接生成してみようと思って、このようなスクリプトを実行してみた。
var _doc=new ActiveXObject("Msxml2.DOMDocument.4.0");
var pi=_doc.createProcessingInstruction('xml',
'version="1.0" encoding="Shift_JIS"');
alert(pi.xml);
ともかくxmlプロパティ(MS独自拡張プロパティ)を見てみると、version属性以外の全てが消えている。というかそもそもXML宣言ってProcessing Instruction(処理命令)だったっけ? 少なくともXPathでは答えは「No」だけど。
それはともかくとして、XML宣言を削除し、文字列として先頭に挿入する形で回避。ベタベタ。
普通にsaveメソッドで保存すればこの問題は起らなかった。
xmlプロパティはUnicodeなので、文字コード宣言が取り払われるらしい。
HTMLヘルプ内のFAQにこんなのがあった。
これを信じて(うそ)プロセッサ完全乗り換え。何故ってHTML + CSSで簡単にUIを設計できて、変換後のXMLのDOMツリーをメモリに置くことができて(
DOMDocument.transformNodeToObject
メソッド)、しかもJScriptでイケるんだもの。でも、決め手はコレ。
selectNodes(expression)
というMS独自拡張メソッドでXPath式が使える。らしい。なんかワクワクする。ワクワクするといえば次世代fub(謎)はXMLでUI(?)を定義するそうで。