number

Numérotons :

 feuille16.xsl  appliquée sur atomes.xml --> résultat
<xsl:template match="classification_atomique">
  <html><body>
    <xsl:apply-templates/>
  </body></html>
</xsl:template>
<xsl:template match="atome">
  <xsl:number format="a"/>
  <xsl:text>.  </xsl:text>
  <xsl:value-of select="nom"/>  
  <xsl:text> </xsl:text>
  <xsl:value-of select="symbole"/>  
  <xsl:text> </xsl:text>
  <xsl:value-of select="type"/>
  <xsl:text disable-output-escaping="yes">
         &lt;br&gt;</xsl:text>
</xsl:template>
<html>
   <body>
      a.  hydrog&egrave;ne H<br>
      b.  h&eacute;lium He gaz rare<br>
      c.  lithium Li m&eacute;tal alcalin<br>
      d.  b&eacute;rillium Be 
          m&eacute;tal alcalino-terreux<br>
      e.  bore B non m&eacute;tal<br>
      f.  carbone 
....

Le template "atome" sera numérotée à partir de la valeur "a". A chaque application du template, le numéro est incrémenté.

 feuille17.xsl  appliquée sur famille_atome.xml --> résultat
<xsl:template match="famille|atome">
  <xsl:number count="famille|atome" 
       level="multiple" format="A.1"/>
  <xsl:text>.  </xsl:text>
  <xsl:choose>
    <xsl:when test="local-name(.)='famille'">
      <xsl:value-of select="@type"/> 
      <xsl:text disable-output-escaping="yes">
           &lt;br&gt;</xsl:text>
      <xsl:apply-templates/>
    </xsl:when>
    <xsl:when test="local-name(.)='atome'">
      <xsl:value-of select="name"/>   
      <xsl:text> </xsl:text>
      <xsl:value-of select="symbole"/>
    </xsl:when>
  </xsl:choose>
  <xsl:text disable-output-escaping="yes">
       &lt;br&gt;</xsl:text>
</xsl:template>
<html>
   <body>
      A.  gaz rare<br>
      A.1. He<br>
      A.2. Ne<br>
      A.3. Ar<br>
      <br>
      B.  m&eacute;tal alcalin<br>
      B.1. Li<br>
      B.2. Na<br>
      <br>
      C.  m&eacute;tal 
....

Içi, "on numérote" les noeuds atome et famille en préçisant sur plusieurs (multiple) niveaux. Les niveaux coïncident avec la structure arborescente. Les formats et valeurs initiales de numérotation sont données par "A.1".
Remarquons que local-name(.) du langage XPath permet de distinguer entre les éléments famille et atome.

<xsl:number [count="pattern"] [level="single|multiple|any"] [format="chaine"]/>
insére en "output" un numéro incrémenté. Par défaut, sur les noeuds courants, sinon ceux sélectionnés par le pattern. Avec une numérotation sur un seul (single) niveau de l'arborescence du document initial, ou sur plusieurs (multiple) niveaux, ou sans tenir compte (any) des niveaux. Les formats et valeurs initiales de numérotation sont données par la chaine.

Exercice :

Reprendre l'exercice 10, pour obtenir la numérotation ci-dessous :

$ java Transform feuille17exo.xsl famille_atome.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<classification_atomique>
<famille><nom numero="A">gaz rare</nom>
<atome numero="A.a" masse="4">hélium</atome>
<atome numero="A.b" masse="20">néon</atome>
<atome numero="A.c" masse="40">argon</atome>
</famille>
<famille><nom numero="B">métal alcalin</nom>
<atome numero="B.a" masse="7">lithium</atome>
<atome numero="B.b" masse="23">sodium</atome>
</famille>
<famille><nom numero="C">métal alcalino-terreux</nom>
...

 index  suivant