| |
XML文書をXSLTスタイルシートに動的にひも付ける(ASP.NET編) | ||
|
XSLTに対応していないWebブラウザでXML文書を整形して表示するためには、サーバ側でXML文書をHTMLに変換する必要があります。ASP.NETで実現する方法を解説しましょう。
|
2003/5/8
「XML文書にXSLTスタイルシートを静的にひも付ける」でも紹介したように、XML文書はXSLT対応のWebブラウザを使って、HTMLなどの可読性の高いフォーマットに簡単に変換できます。
では、XSLT非対応のWebブラウザではXML文書をHTML化できないのでしょうか。例えば、軽量のWebブラウザとしてシェアを伸ばしつつあるOperaで、books.xmlを参照した場合、以下のようにテキスト部分がベタで表示されてしまいます。
![]() |
| Operaによるbooks.xmlの表示結果 |
XSLTを利用してXML文書を表示するときには、対象とするWebブラウザをXSLTに対応したInternet Explorer 6.xやNetscape 7.xだけに限定すればいいのかもしれませんが、昨今ではPDAや携帯電話のようなモバイル環境のユーザーも決して無視することはできません。そもそも、XMLとXSLT導入の目的の1つが「多様なクライアント環境に応じた柔軟なフォーマットの提供」ですから、XMLからHTMLへの変換のしくみ自体がクライアントに依存するのはナンセンスでしょう。
また、XSLT変換が決して軽い処理ではないため、クライアントでの実行はパフォーマンスの点でも有利ではないともいえます。そこで、ここではXSLT変換をサーバサイドのしくみとして行う方法を紹介します。サーバサイドでXSLT変換が行われてしまえば、出力される結果はただのHTML(デバイスによってはcHTMLやWMLにします)ですから、クライアント側ではこれを「ただ表示すればよい」ことになります。元のデータがXML文書であることをなんら意識する必要はありません。
サーバサイドの技術には、JSP、サーブレット、PHP、ASP、CGI、Cold Fusion、Rubyなどさまざまありますが、本稿ではXML/XSLTに標準で対応し、出力の手順も比較的シンプルなASP.NETを採用することにします。
実行に際しては、サーバ側環境として最低限、Windows2000、IIS(Internet Information Services)5.0、.NET Framework SDK 1.0以上の環境が必要である点に注意してください。クライアント側はHTMLを表示できるWebブラウザさえあれば、特に制限はありません。
以下は、XML文書books.xmlをXSLTスタイルシートbasic.xslで変換し、その結果を出力するASP.NETアプリケーションです。
[books.xml] |
[basic.xsl] <?xml version="1.0" encoding="Shift_JIS"
?> |
[transform.aspx] |
表示結果は次のようになります。
![]() |
以下に、ASP.NETでXSLT変換を行う際のポイントをまとめておくことにします。ASP.NETプログラミングの基本的な考え方についてはここでは触れませんので、Insider.NETフォーラムの「連載:プログラミングASP.NET」などを参照してみてください。
(1)System.Xml、System.Xml.Xsl名前空間をインポートする
XML文書を保持するXmlDocumentクラスはSystem.Xml名前空間に、XSLT変換をつかさどるXslTransformクラスはSystem.Xml.Xsl名前空間に、それぞれ属しています。これらを使用するに当たっては、あらかじめ@Importディレクティブで各名前空間をインポートしておかなければなりません。
<%@ Import Namespace="System.Xml" %> |
(2)XMLサーバコントロールを利用する
XMLサーバコントロールは、ASP.NETであらかじめ用意されているリッチコントロールの1つで、XML文書またはXSLT変換結果の表示を担います。
<asp:Xml id="objXml" runat="server"
/> |
プログラム側からコントロールを特定するためのキー(オブジェクト名)となるid属性と、サーバサイドコントロールであることを示すrunat属性は必須です。
今回はプログラム側から動的に対象となるXML文書とXSLTスタイルシートとを割り当てていますが、もしも静的に直接XMLとXSLTとを指定したいという場合には、以下のようにDocumentSource属性、TransformSource属性を指定することで可能です。
<asp:Xml id="objXml" runat="server" |
また、XML文書を直接に「.aspx」ファイル内に記述することも可能です。
<asp:Xml id="objXml" TransformSource="basic.xsl"
runat="server"> |
ですからこれを利用すれば、(ここでは扱いませんが)<asp:Xml>コントロールの配下に動的にXML文書を出力し、それをさらにXSLTスタイルシートで変換するというような操作も可能でしょう。
(3)コントロールにXML文書とXSLTスタイルシートを割り当てる
本TIPSでは、<asp:Xml>コントロールに動的にXML文書とXSLTスタイルシートを割り当てています。これを行っているのが、以下の部分です。
objDoc.Load(Server.MapPath("books.xml")) |
XmlDocument#Load、XslTransform#Loadメソッドは、指定されたXML文書、XSLTスタイルシートを読み込み、それぞれのオブジェクトにセットします。Server#MapPathメソッドは、指定されたファイルの絶対パスを取得するためのメソッドです。
これで、ただの箱であったXmlDocument、XslTransformオブジェクトには対象のデータが入力されたことになりますので、それぞれ<asp:Xml>サーバコントロールのDocument、Transformプロパティにセットします。
データのセットされた<asp:Xml>サーバコントロールは、自動的にXSLT変換を行い、変換結果を出力します。
なお、今回はただ単にプログラム上に直接指定されたXML文書とXSLTスタイルシートを割り当てているだけですが、例えば、クライアントの種類によってXSLTスタイルシートを振り分けるなどの操作を行うことで、マルチデバイス対応のページも簡単に作成することができます。
| 「XMLテクニック集」 |
TechTargetジャパン
- 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」の詳細も紹介する
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


