Internet ExplorerとMSXML

Internet Explorer 5.0が登場した時、「これでXML文書をWebブラウザに表示できるようになった。」と言われました。ところが、Internet Explorerと、付属のMSXML(Microsoft XMLパーサ)の関係がややこしく、いろいろ誤解が生じています。名前空間http://www.w3.org/TR/WD-xslhttp://www.w3.org/1999/XSL/Transformの問題もここに起因します。

そこで、Internet ExplorerとMSXMLについてまとめてみました。

MSXMLについて

Internet Explorer 5以降でXMLを処理できるのは、Internet ExplorerにMSXMLが付属しているからです。Internet Explorer 4.0にすでにMSXML 1.0が含まれていたのですが、簡単にXML文書を表示できるようになったのはInternet Explorer 5.0+MSXML 2.0からです。
MSXMLは、Internet Explorerとは別にバージョンアップを続けています。最新のInternet Explorerをインストールすると、自動的に最新のMSXMLがインストールされる訳ではありません。

MSXMLのバージョンによって、XMLやXSLへの対応状況が大きく異なりますので、ご注意ください。
MSXMLの最新バージョンは、2001年4月にリリースされたVer.4.0 テクノロジープレビューで、XML Schemaの勧告案に対応しています。

MSXMLのバージョン ファイル名 付属している製品
1.0 msxml.dll Internet Explorer 4.0
2.0 msxml.dll Internet Explorer 5.0
2.5 msxml.dll Internet Explorer 5.01
2.5 SP1 msxml.dll Internet Explorer 5.5
3.0 msxml3.dll

Internet Explorer 6.0

4.0 msxml4.dll、
msxml4a.dll、
msxml4r.dll
Microsoftのサイトかダウンロード

MSXML 2.xと3.0以降の違い

Internet Explorer 5.xに付属のMSXML 2.xと、Internet Explorer 6.0に付属の3.0以降はかなり異なります。最も大きな違いの1つがXSLへの対応です。

Internet ExplorerにXML文書を表示するとき、多くの場合XSLを使用します。XSL(Extensible Style Language)の役割はXMLの文書構造を変換するTransformationの機能と、文書の外観など(音声なども含む)を整えるFormatting Objectsの機能に分かれます。この2つは最初はW3CのXSLワーキングドラフトの中に一緒に入っていたのですが、変換に関する部分のみが抜き出され、XSLT(XSL Transformations)として勧告になりました。残されたFormatting Objectsの方はXSLとして、現在は勧告候補の段階にあります。

MSXML 3.0以降は、このXSLTの勧告に基づいて開発されています。一方、古いMSXML 2.xは、まだXSLTが分離される前、TransformationとFormatting Objectsが一緒に論じられていたころのXSLの1998年12月18日付のワーキングドラフト中のTransformationの部分に基づいて開発されています。

以前のXSLワーキングドラフト

Transformation(*1)

XSLT(勧告)(*2)
Formatting Objects XSL(勧告候補)
  • MSXML 2.xは「XSL対応」と言われているのですが、ここでの「XSL」は現在勧告候補の「XSL」でなくて、以前のXSLワーキングドラフトのTransformation(*1)の部分です。それがいろいろ変更されて勧告となったXSLT(*2)のかなりの部分を実装したのが、MSXML 3.0です。XSLのFormatting Objectsの部分には、MSXML 2.xもMSXML 3.0以降も対応していません。(では、Formattingが担当するはずのXMLの外観の部分は今どうしているのかというと、HTMLと同じCSSを使うか、XSL(T)でXMLをHTMLに変換し、HTMLの要素や属性で指定しています。)

  • MSXML 2.xの「XSL」スタイルシートとMSXML 3.0以降のXSLTスタイルシートでは、名前空間が異なります。(その他いろいろ異なりますが、一番目立つのは名前空間の違いです。)

    MSXML 2.x: http://www.w3.org/TR/WD-xsl
    →1998年12月18日付XSLワーキングドラフトで指定されている名前空間

    MSXML 3.0以降: http://www.w3.org/1999/XSL/Transform
    →XSLT 1.0勧告で指定されている名前空間

    したがって、<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform>と記述したスタイルシートを適用したXML文書は、(MSXML 3.0以降をインストールしていない)Internet Explorer 5.xでは表示できません。このため、Internet Explorer 5.xでXSLTを使用するには、MSXML 3.0以降をインストールする必要があります。Internet Explorer 6.0にはMSXML 3.0が付属しているため、特に何もインストールしないでもXSLTを使用できます。

MSXML 3.0への切り替え

  • MSXML 4.0には、以下の方法で切り替えることができません。

MSXML 3.0をダウンロードしてインストールしても、以前のバージョンのMSXMLには上書きされません。
各バージョンのdllが共存し、必要に応じて切り替えて使用することができます。Internet ExplorerでMSXML 3.0を使用するためには、Microsoftのダウンロードセンターからxmlinstをダウンロードし、以下の方法でMSXML 3.0に切り替える必要があります。

  1. MS-DOSプロンプトを表示し、WindowsのSystem(32)フォルダに移動します。
  2. 以下のように入力し、[Enter]キーを押します。
      xmlinst
    古いレジストリの値が削除されます。
  3. 以下のように入力し、 [Enter]キーを押します。
      regsvr32 msxml3.dll
    MXSML 3.0がレジストリに登録されます。

上記の操作を行わないと、MSXML 3.0をインストールしたつもりでも、Internet ExplorerではMSXML 2.xを使い続けることになります。

関連情報

置換モードによる Msxml3.dll インストール

  • xmlinstでのMSXMLのバージョンの切り替え方法や、MSXMLの詳細なバージョン、GUID、ProgIDなどについて掲載されています。

MSDN Online Tools - XSL to XSLT Converter

  • XSLスタイルシートからXSLTスタイルシートへのコンバータがダウンロードできる他、両者の違いについても記述されています。

VBXML XSLT reference (英語)

  • MSXMLのバージョンごとのXSL(T)への対応状況の一覧が掲載されています。

Unofficial MSXML XSLT FAQ (英語)

  • MSXMLのXSLT対応に関するFAQです。