変数の値は、例えば<xsl:variable name="red" select="'color:red'"/>のようにselect属性で直接設定できる。しかし実用的には<xsl:if>や<xsl:choose>などの条件処理を使って設定できればより活用できる。
[サンプルXML文書を表示](下のフレームに)
XML文書から株式出来高の最小額銘柄名と最大額銘柄名を取得し、それぞれグローバル変数"最小"、"最大"の変数名で保存する。次に出来高額によって表示色を変更するため、条件処理<xsl:choose>を使い出来高に応じた色をローカル変数として保存する。
XMLソース
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="var05.xsl"?>
<root>
<title>2004年8月20日の東証株式第一部情報</title>
<data>
<kabu><name code="6752">松下電器産業</name><end>1436</end><total>3362</total></kabu>
<kabu><name code="6753">シャープ</name><end>1516</end><total>9077</total></kabu>
<kabu><name code="6758">ソニー</name><end>3700</end><total>3840</total></kabu>
<kabu><name code="6764">三洋電機</name><end>386</end><total>9712</total></kabu>
<kabu><name code="6501">日立製作所</name><end>667</end><total>8939</total></kabu>
<kabu><name code="6502">東芝</name><end>406</end><total>16041</total></kabu>
<kabu><name code="6701">NEC</name><end>702</end><total>8493</total></kabu>
<kabu><name code="6702">富士通</name><end>671</end><total>3737</total></kabu>
</data>
</root>
XSLソース
<?xml version="1.0" encoding="Shift_Jis"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:variable name="最小"> <!-- グローバル変数-->
<xsl:for-each select="//data/kabu">
<xsl:sort select="total" data-type="number"/>
<xsl:if test="position()='1'">
<xsl:value-of select="name"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="最大"> <!-- グローバル変数-->
<xsl:for-each select="//data/kabu">
<xsl:sort select="total" data-type="number"/>
<xsl:if test="position()=last()">
<xsl:value-of select="name"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:template match="/">
<center><H3><xsl:value-of select="root/title"/></H3></center>
<xsl:apply-templates select="root/data"/>
</xsl:template>
<xsl:template match="data">
<xsl:variable name="最小色"> <!-- ローカル変数-->
<xsl:choose>
<xsl:when test="kabu[name=$最小]/total < 3000">
color:black
</xsl:when>
<xsl:when test="kabu[name=$最小]/total > 3000 and kabu[name=$最小]/total < 8000">
color:blue
</xsl:when>
<xsl:when test="kabu[name=$最小]/total > 8000">
color:green
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:variable name="最大色"> <!-- ローカル変数-->
<xsl:choose>
<xsl:when test="kabu[name=$最大]/total < 10000">
color:pink
</xsl:when>
<xsl:when test="kabu[name=$最大]/total > 10000 and kabu[name=$最大]/total < 15000">
color:magenta
</xsl:when>
<xsl:when test="kabu[name=$最大]/total > 15000">
color:red
</xsl:when>
</xsl:choose>
</xsl:variable>
出来高の最小は・・・・<span style="{$最小色}"><xsl:value-of select="$最小"/></span>:
<xsl:value-of select="kabu[name=$最小]/total"/>(千株)<br/>
出来高の最大は・・・・<span style="{$最大色}"><xsl:value-of select="$最大"/></span>:
<xsl:value-of select="kabu[name=$最大]/total"/>(千株)
</xsl:template>
</xsl:stylesheet>
end(05/5/9)