generate-id() 関数  
指定されたノードに固有の ID (XML 名) を生成します。ノードセットが指定されていない場合、generate-id() はコンテキストノードの ID を生成します。
 
入力

省略可能なノードセット。ノードセットが指定されていない場合、この関数はコンテキストノードの ID を生成します。ノードセットが空の場合、generate-id() は空の文字列を返します。

 
出力

固有の ID、または空のノードセットが指定されている場合は空の文字列。generate-id() 関数については、次のことを知っておくことが重要です。

    指定された変換について、特定のノードに対して generate-id() を呼び出すときは、XSLT プロセッサが毎回同じ ID を返す必要があります。変換中は ID を変更できません。明日にこのスタイルシートを使用してドキュメントの変換を XSLT プロセッサに指示した場合、generate-id() が 2 回目も同じ ID を生成するという保証はありません。明日行われる generate-id() への呼び出しでは、すべて同じ ID が生成されますが、その ID は今日生成されたものではなくなる可能性があります。

    生成された ID が、ドキュメントに既にある ID の重複であるかどうかをチェックするために、generate-id() 関数を使用する必要はありません。つまり、ドキュメントのある要素に値 sdk3829a が設定されたタイプ ID の属性がある場合、generate-id() が返す ID に値 sdk3829a が含まれる可能性はほとんどありません。ただし、まったく可能性がないとはいえません。

    2 つの異なるノードに対して generate-id() を呼び出した場合、生成される 2 つの ID は異なったものである必要があります。

    ノードセットを指定すると、generate-id() は、ドキュメント順で最初に発生するノードセット内のノードの ID を返します。

    この関数に渡すノードセットが空の場合、つまり generate-id(fleeber) を呼び出したが、現在のコンテキストに <fleeber> 要素が含まれていない場合、generate-id() は空の文字列を返します。

 
定義先

XSLT 12.4 節「Miscellaneous Additional Functions」

 

document('') 関数を使用してその独自の <xsl:text> ノードすべてにアクセスする単純なスタイルシートを次に示します。次に、generate-id() を使用してこれらの各ノードに固有の ID を生成し、generate-id() をもう一度呼び出して、指定されたノードに同じ ID を生成することを示します。スタイルシートは次のとおりです。

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text"/>

  <xsl:variable name="newline">
<xsl:text>
</xsl:text>
  </xsl:variable>

  <xsl:template match="/">
    <xsl:value-of select="$newline"/>
    <xsl:text>A test of the generate-id() function:</xsl:text>

    <xsl:value-of select="$newline"/>
    <xsl:value-of select="$newline"/>
    <xsl:for-each select="document('')//xsl:text">
      <xsl:text>Node name: </xsl:text>
      <xsl:value-of select="name()"/>
      <xsl:text> - generated id: </xsl:text>
      <xsl:value-of select="generate-id()"/>
      <xsl:value-of select="$newline"/>
    </xsl:for-each>
    <xsl:value-of select="$newline"/>
    <xsl:value-of select="$newline"/>
    <xsl:text>Now we'll try it again...</xsl:text>
    <xsl:value-of select="$newline"/>
    <xsl:value-of select="$newline"/>
    <xsl:for-each select="document('')//xsl:text">
      <xsl:text>Node name: </xsl:text>
      <xsl:value-of select="name()"/>
      <xsl:text> - generated id: </xsl:text>
      <xsl:value-of select="generate-id()"/>
      <xsl:value-of select="$newline"/>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

スタイルシートからは、次のような結果が生成されます。


A test of the generate-id() function:

Node name: xsl:text - generated id: NC
Node name: xsl:text - generated id: N16
Node name: xsl:text - generated id: N22
Node name: xsl:text - generated id: N28
Node name: xsl:text - generated id: N38
Node name: xsl:text - generated id: N44
Node name: xsl:text - generated id: N4A


Now we'll try it again...

Node name: xsl:text - generated id: NC
Node name: xsl:text - generated id: N16
Node name: xsl:text - generated id: N22
Node name: xsl:text - generated id: N28
Node name: xsl:text - generated id: N38
Node name: xsl:text - generated id: N44
Node name: xsl:text - generated id: N4A

毎回生成される ID は同じです。