3.2 Application de templates aux sous-éléments
A. <xsl:apply-templates />
-
Ici on définit une simple règle pour la racine qui se déclenche (normalement) en premier):
<xsl:template match="/">
<html> <body>
<xsl:apply-templates/>
</body> </html>
</xsl:template>
-
Un simple apply-templates (sans attributs) examine tous les noeuds enfants dans l’ordre. Si une règle qui correspond à un noeud est détectée, elle sera appliquée
<page>
<title>Hello Cocoon friend</title>
<content>Here is some content :) </content>
<comment>Written by DKS/Tecfa, adapted from S.M./the Cocoon samples </comment>
</page>
-
Pour le XML ci-dessus, les 2 règles pour "title" et "content" se déclencheraient!
<xsl:template match="title"
>
<h1 align="center"> <xsl:apply-templates/> </h1>
</xsl:template>
<xsl:template match="content"
>
<p align="center"> <xsl:apply-templates/> </p>
</xsl:template>
B. L’attribut "select" de apply-templates
-
permet de spécifier un élément défini par un XPath (au lieu de tous les enfants),
-
Autrement dit, on donne l’ordre explicite de chercher et d’appliquer toutes les règles à disposition pour un seul type d’élément identifé par un XPath
-
Dans l’exemple ci-dessous la règle déclenchée pour un élément <page> lance seulement la règle qui s’applique au sous-élément <title>
<xsl:template match="page">
<xsl:apply-templates select
="title"/>
</xsl:template>
Cette règle pourrait s’appliquer au texte XML suivant:
<page>
<title>Hello Cocoon friend</title>
<content>
Here is some content. Olé !
</content>
<comment>
Written by DKS/Tecfa, adapted from S.M./the Cocoon samples
</comment>
</page>
3.3 Déroulement de l’exécution des règles
En simplifiant .....
-
Le "moteur" XSLT cherche d’abord à exécuter la
première
règle qu’il trouve pour l’élément racine.
-
Cette règle normalement fait appel à d’autres règles
-
soit implicitement :
<xsl:apply-templates/>
-
soit en faisant appel à des règles précises:
<xsl:apply-templates select="regle"/>
-
Chacune des sous-règles qui peuvent s’appliquer sera exécutée dans l’ordre et ainsi de suite
-
Le processeur ne trouve que les règles qui s’appliquent aux enfants du contexte actuel !!!
-
http://tecfa.unige.ch/guides/xml/examples/simple/hello-page-wrong.xml
<page>
<title>Hello Cocoon friend</title>
<content
> <p> Here is some content. Olé ! </p> </content
>
<comment
> Written by DKS/Tecfa, adapted from S.M./the Cocoon samples </comment
>
</page>
La règle suivante ne marche pas, car
comment
n’est pas un enfant de
content
<xsl:template match="content">
<xsl:apply-templates select
="comment"/>
</xsl:template>
La règle suivante marche:
<xsl:template match="content">
<xsl:apply-templates select
="p>
</xsl:template>