La numérotation composée avec xsl:number
Fondamental : Gé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.
Exemple : Numé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
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
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
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>