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 は同じです。