Fonction generate-id() |
Génère un ID unique (un nom XML) pour un nœud donné. Si aucun ensemble de nœuds n'est indiqué, la fonction generate-id() génère un ID pour le nœud de contexte.
Entrées
Un ensemble de nœuds facultatif. Si aucun ensemble de nœuds n'est indiqué, cette fonction génère un ID pour le nœud de contexte. Si l'ensemble de nœuds est vide, la fonction generate-id() renvoie une chaîne vide.
Sortie
Un ID unique ou une chaîne vide si l'ensemble de nœuds indiqué est vide. Il est important de connaître certaines informations concernant la fonction generate-id() : Pour une transformation donnée, à chaque invocation de la fonction generate-id() avec un nœud donné, le processeur XSLT doit renvoyer le même ID. L'ID ne peut pas être modifié lors de l'exécution d'une transformation. Si vous voulez que le processeur XSLT transforme votre document avec cette feuille de style le lendemain, il n'est pas garanti que la fonction generate-id() génèrera le même ID la deuxième fois. Tous les appels de la fonction generate-id() effectués le lendemain génèreront le même ID, mais cet ID ne correspondra peut-être pas à celui généré la veille. La fonction generate-id() n'est pas tenue de vérifier si l'ID qu'elle génère duplique un ID figurant déjà dans le document. En d'autres termes, si un élément du document possède un attribut de type ID avec la valeur sdk3829a, il y a peu de chance pour qu'un ID renvoyé par la fonction generate-id() présente la valeur sdk3829a. C'est improbable mais cela peut arriver. Si la fonction generate-id() est invoquée avec deux nœuds différents, les deux ID générés doivent être différents. Pour un ensemble de nœuds, la fonction generate-id() renvoie un ID pour le nœud de cet ensemble qui apparaît le premier dans l'ordre du document. Si l'ensemble de nœuds transmis à la fonction est vide (la fonction generate-id(fleeber) est invoquée, mais aucun élément <fleeber> ne figure dans le contexte actuel), la fonction generate-id() renvoie une chaîne vide.
Définie dans
XSLT section 12.4, Fonctions supplémentaires Divers.
Exemple
La feuille de style suivante utilise la fonction document('') pour accéder à l'ensemble de ses nœuds <xsl:text>. Elle utilise ensuite la fonction generate-id() pour générer un ID unique pour chacun de ces nœuds, puis rappelle la fonction generate-id() pour montrer que la fonction génère le même ID pour un nœud donné. La feuille de style est la suivante :
    <?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>
Les résultats suivants ont été générés par la feuille de style :
    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
Les ID générés sont chaque fois les mêmes.