current()関数

XSLT組み込み関数で、カレントノード(node-set)を返す。多くの場合、起点ノード(コンテキストノード)と同じになるが、式の中ではコンテキストノードは移り変わることがあり、カレントノードとは異なることがあるので注意。

[サンプルXML文書を表示](下のフレームに)

XMLソース

<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="current01.xsl"?>
<root>
<title>2004年8月20日の東証株式第一部情報</title>
<info><name>銘柄</name><end>終値(円)</end><total>出来高(千株)</total></info>
<data if_end ="1000">株式データ
<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>
<end>以上です(2005/4/13)</end>
</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: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:value-of select="current()/text()" /><br/><!--カレントノードは"data"-->
<xsl:value-of select="./text()" /><!--起点ノード(コンテキストノード)も同じ"data"-->
<hr/>
<xsl:for-each select="kabu">
<xsl:value-of select="current()/name"/>、<!--カレントノードは"kabu"-->
</xsl:for-each>
<hr/>
<xsl:apply-templates select="kabu[end &lt; current()/@if_end]"/><!--カレントノードは"data"-->
</xsl:template>

<xsl:template match="kabu">
<xsl:if test="name[.='東芝']"><!--"."は起点ノード(コンテキストノード)、即ち"name"-->
<xsl:value-of select="."/>
</xsl:if>
<xsl:if test="name[current()='NEC']"><!--カレントノードは"kabu"、よって式は成立しない-->
<xsl:value-of select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

end(05/4/13)