É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 attribut name, il peut avoir aussi, mais pas forcément, un attribut match.
  • match
    Un Modèles qui identifie le ou les nœuds sources auxquels s'applique la règle. L'attribut match est obligatoire à moins que l'élément <xsl:template> possède un attribut name. 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'attribut match, il ne peut pas avoir d'attribut mode. Si un élément <xsl:apply-templates> possède un attribut mode, il s'applique uniquement aux règles de modèle des éléments <xsl:template> ayant un attribut mode de même valeur ; si un élément <xsl:apply-templates> n'a pas d'attribut mode, il s'applique uniquement aux règles de modèle des éléments <xsl:template> qui n'ont pas d'attribut mode.

Informations sur l'élément

Nombre d'occurrences

Illimité

Éléments parents

xsl:stylesheet, xsl:transform

É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)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="templ.xsl"?>
<portfolio xmlns:dt="urn:schemas-microsoft-com:datatypes" xml:space="preserve">
  <stock exchange="nyse">
    <name>zacx corp</name>
    <symbol>ZCXM</symbol>
    <price dt:dt="number">28.875</price>
  </stock>
  <stock exchange="nasdaq">
    <name>zaffymat inc</name>
    <symbol>ZFFX</symbol>
    <price dt:dt="number">92.250</price>
  </stock>
  <stock exchange="nasdaq">
    <name>zysmergy inc</name>
    <symbol>ZYSZ</symbol>
    <price dt:dt="number">20.313</price>
  </stock>
</portfolio>

Fichier XSLT (templ.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="stock">
   <DIV STYLE="font-weight:bold">
      Symbol: <xsl:value-of select="symbol" />, 
      Price: <xsl:value-of select="price" />
   </DIV>
</xsl:template>

</xsl:stylesheet>

Sortie

Voici les données en sortie formatées :

Symbol: ZCXM, Price: 28.875

Symbol: ZFFX, Price: 92.250

Symbol: ZYSZ, Price: 20.313