Attribut mode
Utilisation de l'attribut « mode »
Il arrive que nous voulions définir plus d'un modèle pour un élément donné. Nous pouvons ajouter des modèles en utilisant l'attribut « mode » qui s'applique aux éléments « xsl:apply-templates » et « xsl:template ». La règle est très simple : si votre élément « xsl:apply-templates » a une valeur d'attribut pour « mode », alors seuls les éléments « xsl:template » ayant la même valeur d'attribut pour « mode » s'appliquent. On utilise souvent l'attribut « mode » pour faire des tables des matières.
Prenons, par exemple, la liste de cours suivants :
<?xml version="1.0" encoding="ISO-8859-1" ?> <universite> <cours><nom>INF 102 Introduction avancée</nom> <description>Un cours d'introduction à l'informatique pour futurs ingénieurs.</description></cours> <cours><nom>INF 101 Introduction</nom> <description>Un cours d'introduction à l'informatique pour les étudiants en éducation.</description></cours> <cours><nom>INF 103 Java</nom> <description>Un cours d'introduction au Java</description></cours> </universite>
Nous pourrions vouloir que s'affiche d'abord seulement la liste des noms de cours et que cette dernière soit suivie d'une liste détaillée comprenant le nom et la description du cours :
La liste des cours en bref:
- INF 102 Introduction avancée
- INF 101 Introduction
- INF 103 Java
La liste détaillée des cours:
- INF 102 Introduction avancée: Un cours d'introduction à l'informatique pour futurs ingénieurs.
- INF 101 Introduction: Un cours d'introduction à l'informatique pour les étudiants en éducation.
- INF 103 Java: Un cours d'introduction au Java
Nous pouvons obtenir ce résultat avec le document XSLT suivant qui utilise l'attribut « mode » :
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="universite"> <html><body> <p>La liste des cours en bref:</p> <ul> <xsl:apply-templates select="cours" mode="initial" /> </ul> <p>La liste détaillée des cours:</p> <ul> <xsl:apply-templates select="cours" mode="complet" /> </ul> </body></html> </xsl:template> <xsl:template match="cours" mode="initial"> <li><xsl:value-of select="nom" /></li> </xsl:template> <xsl:template match="cours" mode="complet"> <li><xsl:value-of select="nom" /> : <xsl:value-of select="description" /></li> </xsl:template> </xsl:stylesheet>