generate-id(node-set)関数

・XSLT1.0で定義された組み込み関数
・ノードを一意に区別できる重複しない文字列識別子を生成して返す。
・引数node-setを渡すと、最初のnode以外は無視される(注1:参照)。引数node-setが空の場合、空の文字列が返される。引数node-setを省略するとコンテキストノードが対象になる。
・同じノードに再度generate-id(node-set)関数を呼び出すと、最初に生成された同じ識別子を返す(注1:、注2:参照)。

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

XMLソース

<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="generate.xsl"?>
<root>
<title>2003年11月05日の東証株式第一部情報</title>
<info><name>銘柄</name><end>終値(円)</end><total>出来高(千株)</total></info>
<data>
<kabu><name code="6752">松下</name><end>1529</end><total>12302</total></kabu>
<kabu><name code="6753">シャープ</name><end>1786</end><total>3964</total></kabu>
<kabu><name code="6758">ソニー</name><end>4030</end><total>8220</total></kabu>
<kabu><name code="6701">NEC</name><end>1027</end><total>19229</total></kabu>
<kabu><name code="6702">富士通</name><end>708</end><total>16634</total></kabu> </data>
<end>以上です(2004/4/10)</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">
<table border="1">
<tr>
<th>企業名</th><th>generate-id()が生成した識別子</th><th>終値</th>
</tr>
<xsl:for-each select="kabu">
<tr>
<td><xsl:value-of select="name"/></td>
<td style="color:red;text-align:center"><xsl:value-of select="generate-id()"/></td>
<td><xsl:value-of select="end"/></td>
</tr>
</xsl:for-each>
</table>
<hr/>
<p>(注1)引数にノードセット(kabu)を指定・・・→<xsl:value-of select="generate-id(kabu)"/></p>
<p>(注2)引数にノード(kabu[3])を指定・・・→<xsl:value-of select="generate-id(kabu[3])"/></p>
</xsl:template>
</xsl:stylesheet>

end(04/4/10)