引数などでスタイルシートを切り替えたい | |
Cocoonの環境下で、複数のXSLTスタイルシートを作りました。これにフォームやリンクから引数を与えることによって、Webブラウザから同じXML文書を要求する場合でも、異なるスタイルシートを適用させる、といったことはできるでしょうか。 |
回答/富士ソフトABC株式会社 技術センター
2002/1/18
まず、ご質問に答えるために作成したサンプルの内容を、下記に簡単な図としてまとめてみました。1つのXML文書に対して、複数のスタイルシートを用意し、それをラジオボタンで操作する、という例を示したいと思います。
図1 質問の内容
|
この動作を実現する方法はいくつかありますが、今回はTomcatとCocoonの環境で、CocoonのXSP(eXtensible Server Pages)を使用したサンプルプログラムを作成しました。以下の環境で動作確認しています。
- Windows 2000 Server (SP2)
- JDK 1.3.1_01
- Tomcat 3.2.3
- Cocoon 1.8.2
- Internet Explorer 6 (Webブラウザとして)
今回作成したサンプルの仕組みを簡単に説明します。
(1)スタイルを選択するためのページを用意する
ラジオボタンを用意し、これを操作することによってユーザーがスタイルシートを選択できるようにします。ソースコードを参照してもらえれば、呼び出すXML文書は1つで、スタイルシートは複数あることが分かるでしょう。
画面1 スタイルシートを選択するラジオボタン
|
<?xml version="1.0" encoding="Shift_JIS"?> <html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="jp"> |
リスト1 選択肢を表示するためのラジオボタン(StyleSelect.xml)
|
(2)スタイルシート(XSLT)を用意する
選択肢に応じたスタイルシートを用意します。今回のサンプルでは、style_1.xsl、style_2.xsl、style_3.xsl、style_4.xsl の4種類を用意しています。
(3)XML文書内でクライアントからの要求を処理する
選択されたラジオボタンに応じたスタイルシートをXML文書に組み込みます。
<xsp:logic> |
リスト2 ラジオボタンによって選択された値を読み込んで、それに従ってスタイルシートを適用する |
上記リストの4〜6行目で、ラジオボタンの選択に応じたスタイルシートのファイル名を生成しています。例えば、ラジオボタンの(1)が選択された場合には、ファイル名は「style_1.xsl」となります。8〜10行目で、最終的にDOMレベルで次のようなスタイルシート宣言をXML文書に追加しています。
<?xml-stylesheet href="style_1.xsl" type="text/xsl"?> |
このようにして、XML文書に最初からスタイルシート宣言があったようにDOM上のXML文書を変更します(sample.xml)。
(4) 要求したスタイルが適用されて表示されることを確認する
選択した結果が反映されて表示されることを確認してください。
画面2 選択されたスタイルシートが適用されたXML文書
|
このサンプルでのポイントは、クライアント側からの要求に従ったスタイルシートの宣言をDOMレベルでXML文書に組み込み、あたかも初めから宣言されていたかのように振る舞うところです。今回紹介した方法のほかにも、FPタグセットを使用する方法も考えられますが、基本的にスタイルシートをDOMレベルで差し替える部分は変わりません。
IISとASPの組み合わせでも同様の方法を用いれば同じことができます。詳しくは説明しませんが、「集中連載:IISでXMLを操作する」などの記事を参考にしてください。
「Ask XML Expert」 |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|