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がわからなくても、比較的容易に動的にフィルターを掛けられる
ってことしか思いつかん・・・
悪いところは、ソースが冗長になり可読性が低下しやすいところかな。
意外と使いやすいのではないかと思うけど、いかがでしょうか?