XSLT (opérations avancées) : Numérotation et ordonnancement

La numérotation composée avec xsl:number

FondamentalGérer les numérotations composées

Face à une structure arborescente plus complexe, on cherchera à numéroter un élément d'un document en fonction de deux choses :

  • Sa position vis à vis de ses prédécesseurs directs (de même niveau hiérarchique)

  • Les indices successifs de ces ancêtres

Cela est facilement réalisable via l'attribut level.

ExempleNumérotation d'éléments imbriqués

Dans le cas du poème suivant, on peut ainsi numéroter un vers de façon à ce que l'indice obtenu prenne en compte sa strophe d'appartenance.

Il faut pour cela indiquer que le niveau de numérotation (level) est multiple et que les éléments à compter (count) sont les strophes et les vers.

XML source :

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="UTF-8"?>
2
<poeme>
3
    <auteur>
4
        <nom>Baudelaire</nom>
5
        <prenom>Charles</prenom>
6
    </auteur>
7
    <titre>Extrait de l'albatros</titre>
8
    
9
    <strophe>
10
        <vers>Souvent, pour s'amuser, les hommes d'équipage</vers>
11
        <vers>Prennent des albatros, vastes oiseaux des mers,</vers>
12
        <vers>Qui suivent, indolents compagnons de voyage,</vers>
13
        <vers>Le navire glissant sur les gouffres amers.</vers>
14
    </strophe>
15
    
16
    <strophe>
17
        <vers>A peine les ont-ils déposés sur les planches,</vers>
18
        <vers>Que ces rois de l'azur, maladroits et honteux,</vers>
19
        <vers>Laissent piteusement leurs grandes ailes blanches</vers>
20
        <vers>Comme des avirons traîner à côté d'eux.</vers>
21
    </strophe>
22
    
23
</poeme>
<?xml version="1.0" encoding="UTF-8"?>
<poeme>
    <auteur>
        <nom>Baudelaire</nom>
        <prenom>Charles</prenom>
    </auteur>
    <titre>Extrait de l'albatros</titre>
    
    <strophe>
        <vers>Souvent, pour s'amuser, les hommes d'équipage</vers>
        <vers>Prennent des albatros, vastes oiseaux des mers,</vers>
        <vers>Qui suivent, indolents compagnons de voyage,</vers>
        <vers>Le navire glissant sur les gouffres amers.</vers>
    </strophe>
    
    <strophe>
        <vers>A peine les ont-ils déposés sur les planches,</vers>
        <vers>Que ces rois de l'azur, maladroits et honteux,</vers>
        <vers>Laissent piteusement leurs grandes ailes blanches</vers>
        <vers>Comme des avirons traîner à côté d'eux.</vers>
    </strophe>
    
</poeme>

XSLT :

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="UTF-8"?>
2
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
4
5
    <xsl:output method="xhtml" encoding="iso-8859-1"/>
6
    <xsl:template match="poeme">
7
        <html>
8
            <head> </head>
9
            <body>
10
                <xsl:apply-templates/>
11
            </body>
12
        </html>
13
    </xsl:template>
14
15
    <xsl:template match="auteur">
16
        <h2>
17
            <xsl:value-of select="prenom"/> <xsl:text> </xsl:text> <xsl:value-of select="nom"/>
18
        </h2>
19
    </xsl:template>
20
21
    <xsl:template match="titre">
22
        <h3>
23
            <xsl:value-of select="."/>
24
        </h3>
25
    </xsl:template>
26
    
27
    <xsl:template match="strophe[last()]" priority="1">
28
        <div>
29
            <xsl:apply-templates/>
30
        </div>
31
    </xsl:template>
32
33
    <xsl:template match="strophe">
34
        <div>
35
            <xsl:apply-templates/>
36
        </div>
37
        <br/>
38
    </xsl:template>
39
40
    <xsl:template match="vers">
41
        <p>
42
            <xsl:number count="strophe|vers" level="multiple" format="1.1"/>
43
            <xsl:text> - </xsl:text>
44
            <xsl:value-of select="."/>
45
        </p>
46
    </xsl:template>
47
48
</xsl:stylesheet>
49
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">

    <xsl:output method="xhtml" encoding="iso-8859-1"/>
    <xsl:template match="poeme">
        <html>
            <head> </head>
            <body>
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="auteur">
        <h2>
            <xsl:value-of select="prenom"/> <xsl:text> </xsl:text> <xsl:value-of select="nom"/>
        </h2>
    </xsl:template>

    <xsl:template match="titre">
        <h3>
            <xsl:value-of select="."/>
        </h3>
    </xsl:template>
    
    <xsl:template match="strophe[last()]" priority="1">
        <div>
            <xsl:apply-templates/>
        </div>
    </xsl:template>

    <xsl:template match="strophe">
        <div>
            <xsl:apply-templates/>
        </div>
        <br/>
    </xsl:template>

    <xsl:template match="vers">
        <p>
            <xsl:number count="strophe|vers" level="multiple" format="1.1"/>
            <xsl:text> - </xsl:text>
            <xsl:value-of select="."/>
        </p>
    </xsl:template>

</xsl:stylesheet>

XML en sortie :

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="iso-8859-1"?>
2
<html>
3
   <head></head>
4
   <body>
5
      <h2>Charles Baudelaire</h2>
6
      <h3>Extrait de l'albatros</h3>
7
      <div>
8
         <p>1.1 - Souvent, pour s'amuser, les hommes d'équipage</p>
9
         <p>1.2 - Prennent des albatros, vastes oiseaux des mers,</p>
10
         <p>1.3 - Qui suivent, indolents compagnons de voyage,</p>
11
         <p>1.4 - Le navire glissant sur les gouffres amers.</p>
12
      </div>
13
      <br />
14
      <div>
15
         <p>2.1 - A peine les ont-ils déposés sur les planches,</p>
16
         <p>2.2 - Que ces rois de l'azur, maladroits et honteux,</p>
17
         <p>2.3 - Laissent piteusement leurs grandes ailes blanches</p>
18
         <p>2.4 - Comme des avirons traîner à côté d'eux.</p>
19
      </div>
20
   </body>
21
</html>
<?xml version="1.0" encoding="iso-8859-1"?>
<html>
   <head></head>
   <body>
      <h2>Charles Baudelaire</h2>
      <h3>Extrait de l'albatros</h3>
      <div>
         <p>1.1 - Souvent, pour s'amuser, les hommes d'équipage</p>
         <p>1.2 - Prennent des albatros, vastes oiseaux des mers,</p>
         <p>1.3 - Qui suivent, indolents compagnons de voyage,</p>
         <p>1.4 - Le navire glissant sur les gouffres amers.</p>
      </div>
      <br />
      <div>
         <p>2.1 - A peine les ont-ils déposés sur les planches,</p>
         <p>2.2 - Que ces rois de l'azur, maladroits et honteux,</p>
         <p>2.3 - Laissent piteusement leurs grandes ailes blanches</p>
         <p>2.4 - Comme des avirons traîner à côté d'eux.</p>
      </div>
   </body>
</html>
PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Benoît Villain, Thibault Brocheton, Lucas Charrier, Félix Motot, 2013-2016 (Contributions : Stéphane Crozat, les étudiants de l'UTC) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)