Jintrick.netagenda2002年08月アーカイブ → 2002年08月01日

消える文字コード宣言(MSXML4.0)

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 version="1.0"?>

ともかくxmlプロパティ(MS独自拡張プロパティ)を見てみると、version属性以外の全てが消えている。というかそもそもXML宣言ってProcessing Instruction(処理命令)だったっけ? 少なくともXPathでは答えは「No」だけど。

それはともかくとして、XML宣言を削除し、文字列として先頭に挿入する形で回避。ベタベタ。

普通にsaveメソッドで保存すればこの問題は起らなかった。

xmlプロパティはUnicodeなので、文字コード宣言が取り払われるらしい。

HTMLヘルプ内のFAQにこんなのがあった。

Does MSXML 4.0 provide a 100% compliant XSLT processor?
Yes. MSXML 4.0 is fully compliant with the XSLT specification. For more information, see Supported XSLT Features.

これを信じて(うそ)プロセッサ完全乗り換え。何故ってHTML + CSSで簡単にUIを設計できて、変換後のXMLのDOMツリーをメモリに置くことができて( DOMDocument.transformNodeToObjectメソッド)、しかもJScriptでイケるんだもの。でも、決め手はコレ。

selectNodes(expression)というMS独自拡張メソッドでXPath式が使える。らしい。なんかワクワクする。ワクワクするといえば次世代fub(謎)はXMLでUI(?)を定義するそうで。


webmaster@jintrick.net
公開: 2002年08月01日
カテゴリ: DOM ,XSLT ,意見交換, 批判等