Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

Fonction position (XPath)

Retourne la position, ou numéro d'index, du nœud, par rapport à tous les nœuds sélectionnés dans la liste de nœuds.

number position()

La position du nœud est de base 1 ; le premier nœud retourne donc la position 1.

L'exemple de code suivant illustre les effets de la fonction position().

Fichier XML (position.xml)


<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="position.xsl"?>      
<test>
    <x a="a11">
      <x a="a21">
        <x a="a31">
          <y b="b31">y31</y>
          <y b="b32">y32</y>
        </x>
      </x>
    </x>
    <x a="a12">
      <x a="a22">
        <y b="b21">y21</y>
        <y b="b22">y22</y>
      </x>
    </x>
    <x a="a13">
      <y b="b11">y11</y>
      <y b="b12">y12</y>
    </x>
    <x a="a14">
      <y b="b01">y01</y>
      <y b="b02">y02</y>
    </x>
</test>


Fichier XSLT (position.xsl)


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

  <xsl:output method="xml"   
              omit-xml-declaration="yes"/>

  <xsl:template match="/">
     <xsl:apply-templates select="//x"/>
  </xsl:template>


  <xsl:template match="*">
    <xsl:element name="{name()}">
        <xsl:apply-templates select="@*"/>
        <xsl:value-of select="position()"/>
    </xsl:element>\n  
  </xsl:template>

  <xsl:template match="@*">
     <xsl:attribute name="{name()}">
        <xsl:value-of select="."/>
     </xsl:attribute>
  </xsl:template>

</xsl:stylesheet>


ms256233.collapse_all(fr-fr,VS.120).gifSortie

Appliquée au fichier XML source, la feuille de style XSLT ci-dessus mappe tous les éléments <x> à de nouveaux éléments <x> dont le contenu comporte leur position dans l'ordre du document.

<x a="a11">1</x>
<x a="a21">2</x>
<x a="a31">3</x>
<x a="a12">4</x>
<x a="a22">5</x>
<x a="a13">6</x>
<x a="a14">7</x>

Pour illustrer la sensibilité de la fonction position() par rapport au contexte dans lequel elle est exécutée, remplaçons la règle de modèle suivante (du fichier XSLT ci-dessus) :


<xsl:template match="/">
  <xsl:apply-templates select="//x"/>
</xsl:template>


par la suivante :


<xsl:template match="/">
     <xsl:apply-templates select="//x[1]"/>
  </xsl:template>


Le résultat est le suivant :

<x a="a11">1</x>
<x a="a21">2</x>
<x a="a31">3</x>
<x a="a22">4</x>

D'autre part, si nous remplaçons la règle de modèle par la suivante :

<xsl:template match="/">
  <xsl:apply-templates select="//x[2]"/>
</xsl:template>

nous obtenons le résultat suivant :

<x a="a12">1</x>                 
Afficher: