Élément <xsl:template>
Définit un modèle réutilisable pour générer la sortie désirée pour des nœuds d'un type et d'un contexte particuliers.
<xsl:template
name= Qname
match = Pattern
priority = number
mode = QName
</xsl:template>
Attributs
- name
Le Noms qualifiés à développer. Si ce nom a un préfixe, le préfixe est développé en une référence URI à l'aide des déclarations d'espace de noms applicables à l'attribut dans lequel figure le nom. Le nom développé, composé de la partie locale du nom et de la référence URI (qui peut avoir la valeur null) est utilisé comme nom de modèle. L'espace de noms par défaut n'est pas utilisé pour les noms sans préfixe. Si un élément<xsl:template>
possède un attributname
, il peut avoir aussi, mais pas forcément, un attributmatch
.
- match
Un Modèles qui identifie le ou les nœuds sources auxquels s'applique la règle. L'attributmatch
est obligatoire à moins que l'élément<xsl:template>
possède un attributname
. Le contenu de l'élément<xsl:template>
est le modèle instancié lorsque la règle de modèle est appliquée.
priority
Chiffre de priorité du modèle. Toutes les règles de modèle dont la priorité est inférieure à celle(s) ayant la plus haute priorité ne sont pas prises en considération. La valeur de cet attribut doit être un nombre réel positif ou négatif compris entre 0 et 9, correspondant au numéro de production éventuellement précédé d'un signe moins (-). La priorité par défaut est calculée comme suit :Si le modèle contient plusieurs possibilités séparées par des |, il est traité comme un ensemble de règles de modèles, une pour chaque possibilité.
Si le modèle a la forme d'un nom qualifié précédé d'une spécification d'axe d'attribut ou d'enfant, ou s'il a la forme d'une instruction de traitement littérale précédée d'une spécification d'axe d'attribut ou d'enfant, la priorité est 0.
Si le modèle est un nom précédé d'une spécification d'axe d'attribut ou d'enfant, la priorité est -0,25.
Sinon, si le modèle est uniquement composé d'un test de nœud précédé d'une spécification d'axe d'attribut ou d'enfant, la priorité est -0,5.
Dans les autres cas, la priorité est 0,5.
Le type de modèle le plus courant (un modèle qui teste un nœud d'un type particulier et ayant un nom développé particulier) a donc une priorité 0. Le type de modèle le moins spécifique suivant (un modèle qui teste un nœud d'un type particulier et ayant un nom développé avec un URI d'espace de noms particulier) a une priorité de -0,25. Les modèles moins spécifiques que cela (modèles qui testent simplement des nœuds de types particuliers) ont une priorité de -0,5. Les modèles plus spécifiques que le type le plus courant ont une priorité de 0,5.
- mode
Valeur du mode. Cette valeur permet de traiter plusieurs fois un élément, en produisant chaque fois un résultat différent. Si<xsl:template>
n'a pas d'attributmatch
, il ne peut pas avoir d'attributmode
. Si un élément<xsl:apply-templates>
possède un attributmode
, il s'applique uniquement aux règles de modèle des éléments<xsl:template>
ayant un attributmode
de même valeur ; si un élément<xsl:apply-templates>
n'a pas d'attributmode
, il s'applique uniquement aux règles de modèle des éléments<xsl:template>
qui n'ont pas d'attributmode
.
Informations sur l'élément
Nombre d'occurrences |
Illimité |
Éléments parents |
|
Éléments enfants |
xsl:apply-imports,xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:number, xsl:param, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, éléments de sortie |
Notes
Notez que le modèle ne doit pas générer un document XML complet (même le modèle racine, à moins d'utiliser transformNodeToObject
), mais seulement un fragment de XML. Il est possible d'inclure du texte non délimité ou plusieurs éléments de document définis par le modèle. Cela facilite la génération de texte brut et de fragments de XML qui peuvent être ensuite traités par une application (par exemple, des fragments de HTML insérés dans une page HTML).
La valeur de l'attribut name
est un nom qualifié développé. Si ce nom a un préfixe, le préfixe est développé en une référence URI à l'aide des déclarations d'espace de noms applicables à l'attribut où le nom figure. Le nom développé, composé de la partie locale du nom et de la référence URI (qui peut avoir la valeur null) est utilisé comme nom de modèle. L'espace de noms par défaut n'est pas utilisé pour les noms sans préfixe.
Si un élément <xsl:template>
possède un attribut name
, il peut avoir aussi, mais pas forcément, un attribut match
. Un élément <xsl:call-template>
appelle un modèle par son nom ; il possède obligatoirement un attribut name
qui identifie le modèle à appeler. À la différence de <xsl:apply-templates>
, <xsl:call-template>
ne change pas le nœud actuel ou la liste de nœuds actuelle.
Une erreur se produit si une feuille de style contient plusieurs modèles du même nom.
Exemple
Cette règle de modèle présente un modèle qui identifie les éléments <stock>
et produit un élément <DIV>
de sortie avec l'attribut STYLE="font-weight:bold"
:
Fichier XML (portfolio.xml)
Fichier XSLT (templ.xsl)
Sortie
Voici les données en sortie formatées :
Symbol: ZCXM, Price: 28.875
Symbol: ZFFX, Price: 92.250
Symbol: ZYSZ, Price: 20.313