.NET Framework 2.0で改善されたXSLTVisual Studio Magazine(5/5 ページ)

» 2005年01月24日 11時30分 公開
[Thiru Thangarathinam,FTPOnline]
前のページへ 1|2|3|4|5       
リスト6■拡張オブジェクトを加える(C#)。ReturnBGColorメソッドを利用するコードは素直だ。BGColorクラスのインスタンスを作り、AddExtentionObjectを使ってそのインスタンス化したオブジェクトをXmlArgumentListオブジェクトに加える
XsltCommand command = new XsltCommand();
// XSLスタイルシートをコンパイルする
command.Compile(Server.MapPath
("ProductsPaging.xsl"));
XmlArgumentList argsList = new
XmlArgumentList();
// (訳注WebのURLパラメータとして渡された)クエリ文字列から
// pageNumberを取得する
int pageNumber = Convert.ToInt32(
Request.QueryString["pagenumber"]);
// 必須パラメータをXmlArgumentListオブジェクトに加える
XmlArgumentList object
argsList.AddParameter
("recordsPerPage", "", 10);
argsList.AddParameter
("pageNumber", "", pageNumber);
argsList.AddParameter
("recordCount", "", 77);
// インスタンスを作り、XsltArgumentListオブジェクトに加える
BGColor obj = new BGColor();
argsList.AddExtensionObject
("urn:myColor",obj);
command.Execute(xpathDoc, null, argsList,
Response.Output);

 リスト6の例では、スタイルシートからカスタムコードを実行するために拡張オブジェクトを用いた。しかしスタイルシートの内部にスクリプトとして埋め込むことでも、同様の機能を実現できる(リスト7)。

リスト7■スタイルシートにスクリプトを埋め込む(XSL)。スクリプトのメソッド(ReturnBGColor)を呼び出すコードは変わらない。Webフォームにおいては、XsltCommandExample.aspxファイルをコピーし、それをXsltCommandExampleWithScript.aspxという名前に変更してほしい。そしてPageのLoadイベントにある、BGColorオブジェクトを作ってXmlArgumentListオブジェクトに加えているコード部分を削除する。ブラウザからページを参照すれば、リスト6と同じ出力を得られる
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:myColor="urn:myColor">
<msxsl:script language="C#"
implements-prefix="myColor">
<![CDATA[
public string ReturnBGColor(int categoryID)
{
string bgColor = null;

switch (categoryID)
{
case (1):
bgColor = "#FFFFC0";
break;
…略(リスト5と同)…
}
return (bgColor);
}
]]>
</msxsl:script>
<xsl:output method="html" />
…略(リスト3と同)…
<!-- 個別の行に関するそれぞれのレコード -->
<xsl:element name="tr">
<xsl:attribute name="bgcolor">
<xsl:value-of select= "myColor:ReturnBGColor(CategoryID)" />
</xsl:attribute>
<xsl:element name="td">
<xsl:value-of select="ProductID" />
</xsl:element>
…略(リスト3と同)…
</xsl:stylesheet>

 ここまで述べてきた例は、単におもしろいといっただけではなく、このテクノロジーを利用して何ができるのかをほのめかすものでもある。

 たとえば、毎回Productsテーブルからすべての行を取得するのではなく、要求された行数だけを取得するように、ここで述べた例を拡張することもできるだろう。拡張オブジェクトは、ユーザーインタフェースの単純なカスタマイズに限らず、さらに、テーブル検索、データ値の調査(バリデーション)、バックアップ操作といった複雑な操作のためにも使える。

著者について:

Thiru Thangarathinam氏は、アリゾナ州チャンドラのインテル社で働いている。.NET関連テクノロジを使った分散エンタープライズアプリケーションの構築、設計、開発を専門とする。.NET関連テクノロジに関する多くの共著書を執筆しており、オンライン出版物にもたびたび寄稿している。

日本語訳:大澤文孝

前のページへ 1|2|3|4|5       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ