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)。
<?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関連テクノロジに関する多くの共著書を執筆しており、オンライン出版物にもたびたび寄稿している。
日本語訳:大澤文孝
Copyright © ITmedia, Inc. All Rights Reserved.