Boucles
Comme vu précédemment, les contenus du document source peuvent être copiés dans le document cible grâce à l'élément <xsl:apply-templates>. Le plus souvent, seuls certains éléments du document source doivent être copiés. Dans ce cas, on peut utiliser l'élément <xsl:for-each>, par exemple pour la création de tables de matières. Dans l'exemple suivant, nous créerons un tel élément.
La feuille de style:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="iso-8859-1" version="1.0"/>
<xsl:template match="recueilPoemes">
<html>
<body>
<h2>Table des matières</h2>
<xsl:for-each select="poeme"> (1)
<a>
<xsl:attribute name="href">#<xsl:value-of select="@anneeParution"/>
</xsl:attribute> (2)
<xsl:value-of select="titre"/>
</a>
<br/>
</xsl:for-each>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="auteur">
<br/>
<h4>
<xsl:apply-templates/>
</h4>
</xsl:template>
<xsl:template match="prenom">
<xsl:apply-templates/>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="nomFamille">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="titre">
<h2>
<a>
<xsl:attribute name="nom"> (3)
<xsl:value-of select="parent::poeme/@anneeParution"/>
</xsl:attribute>
</a>
<xsl:apply-templates/>
</h2>
</xsl:template>
<xsl:template match="strophe">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="vers">
<xsl:apply-templates/>
<br/>
</xsl:template>
</xsl:stylesheet>
(1) L'élément <xsl:for-each> crée une boucle. Pour chaque expression correspondante à l'attribut select, une exécution est générée. Dans la pratique, les boucles permettent de faire un tri. On les utilise souvent lors de la création de tables de matières ou registres dans lesquels certaines informations provenant de l'ensemble du document doivent être rassemblées et restructurées.
(2) Dans notre exemple, les boucles sont utilisées pour l'affichage de tous les noms des pays et pour la création d'une référence interne à ceux-ci à la bonne place dans le document. L'élément <xsl:attribute> crée des attributs dans l'élément parent, dans cet exemple pour l'élément <a>. L'attribut obligatoire name donne son nom à l'attribut dans le document cible, c.-à-d. l'attribut href ici, qui fixe la cible du lien dans HTML. Le contenu de l'élément <xsl:attribute> devient la valeur de l'attribut href dans le document cible. Dans HTML, le caractère # est utilisé, afin de renvoyer à une ancre qui se trouve dans le même document. Le nom de cette ancre est ici fixé via l'année de parution, c.-à-d. le contenu de l'attribut anneeParution.
(3) Le principe appliqué ici correspond à la procédure expliquée ci-dessus. Les ancres dont on a besoin sont générées. On utilise également ici l'élément HTML <a>.
Le document cible:
<html>
<body>
<h2>Table des matières</h2>
<a href="#1905">Der Panther</a> (2)
<br />
<a href="#1799">Zauberlehrling</a> (2)
<br />
<a href="#1945">Moritat von Mackie Messer</a> (2)
<br />
<a href="#1890">Pst!</a> (2)
<br />
<a href="#-750">Ιλιάδα</a> (2)
<br />
<br />
<h4>Rainer Maria Rilke</h4>
<h2>
<a name="1905" />Der Panther</h2>Im Jardin des Plantes, Paris <p>Sein Blick ist vom Vorübergehn der Stäbe<br />so müd geworden, daß er nichts mehr ält.<br />Ihm ist, als ob es tausend Stäbe gäbe<br />und hinter tausend Stäben keine Welt.<br /> (3)
</p>
...
Copyright © dpunkt.verlag GmbH 2004
Vous pouvez imprimer cette version en ligne pour un usage privé. Par ailleurs, ce chapitre du livre "XSL-FO in der Praxis" est soumis aux mêmes clauses prévues pour la version papier: L'intégralité de l'œuvre est protégée par les droits d'auteurs. Tous droits réservés y compris la copie, la traduction, la reproduction sur microfilm, tout comme l'enregistrement et le traitement dans des systèmes électroniques.
dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, téléphone +49 (0)6221-14830, fax +49 (0)6221-148399, hallo(at)dpunkt.de