Ajaxslt実装1

Googleが公開していたAjaxsltのサンプルに触発され、
Ajaxsltについて調査してみた。

が、Googleのサンプルだけでは、
いくつかの必要なソースが無いこともあり、理解するのが困難だったので、
まずは、Ajaxsltを使用していると言われている Google Maps を解析してみた。


その結果、いくつかわかったことがあるので、公開してみる。

1.XMLファイルをXSLTファイルでトランスフォームする

トランスフォームってのは、XMLファイルにXSLTを
適用するっていう意味だと思えばいいかな。
トランスフォームすることで、XSLTを適用した状態のXMLを出力出来る。

2.IE と Mozilla/Firefox で異なった記述をしなければならない

XMLHttpRequest でも異なる記述が必要だったが、
ここでもやはり必要となってきた。
クロスブラウザって難しいね。

3.XSLTの生成方法がいくつかある

  • JavaScriptの中に、テキストとしてゴリゴリと書いておく
  • あらかじめ用意しておいたXSLTファイルを読み込む
  • Google のサンプルでは、JavaScriptのコード中で生成しているようだ

残念ながら、Google のサンプルは、全てのファイルが容易されていない為、
現時点では説明出来ない。

というわけで、まずは、他の2種類の方法を説明する。

今回は、私が編み出した(といっても別にすごくもなんともなく、
ただ単にどこにもサンプルがなかっただけの)方法である、
「JavaScriptの中に、テキストとしてゴリゴリと書いておく」を説明する。

用意したXMLはこんなかんじ。ファイル名は「sample001.xml」とした。

読み込み処理を行うページは下記のようにし、
ファイル名は「sample001.htm」とした。

中盤あたりにある「a」という変数に、ゴリゴリと文字列を代入している部分があるが、
その文字列こそXSLTそのものである。

記述した文字列を、XSLTとして扱えるように変換しているのが
createParserという関数での処理である。

その後、transformToHTML関数内で、
IEはtransformNode、
FirefoxはtransformToFragmentで
XMLにXSLTを適用し、その結果を出力しているというわけである。

この方法の良いところは、

  • すでに用意されているXSLTを使用できる(変数に代入すればいいから)
  • DOMがわからなくても、比較的容易に動的にフィルターを掛けられる

ってことしか思いつかん・・・

悪いところは、ソースが冗長になり可読性が低下しやすいところかな。
意外と使いやすいのではないかと思うけど、いかがでしょうか?

Comments are closed.