Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Présentation des modèles XSLT

Un script XSLT se compose d’un ou plusieurs ensembles de règles appelés modèles. Chaque modèle est un segment de code qui contient des règles à appliquer lorsqu’un nœud spécifié est mis en correspondance. Vous utilisez l’élément <xsl:template> pour créer des modèles.

Il existe deux types de modèles, nommés et sans nom (ou correspondance), et ils sont décrits dans les sections suivantes.

Modèles sans nom (correspondance)

Les modèles sans nom, également appelés modèles de correspondance, incluent un match attribut qui contient une expression XPath pour spécifier les critères des nœuds sur lesquels le modèle doit être appelé. Dans l’exemple suivant, le modèle s’applique à l’élément nommé route qui est un enfant du contexte actuel et qui a un élément enfant nommé next-hop dont la valeur commence par la chaîne 10.10..

Par défaut, lorsque XSLT traite un document, il traverse de manière récursive l’ensemble de la hiérarchie des documents, inspectant chaque nœud et recherchant un modèle qui correspond au nœud actuel. Lorsqu’un modèle correspondant est trouvé, le contenu de ce modèle est évalué.

L’élément <xsl:apply-templates> peut être utilisé dans un modèle sans nom pour limiter et contrôler la traversée hiérarchique de nœuds par défaut de XSLT. Si l’élément <xsl:apply-templates> possède un select attribut, seuls les nœuds correspondant à l’expression XPath définie par l’attribut sont traversés. Sinon, tous les enfants du nœud de contexte sont traversés. Si l’attribut select est inclus, mais qu’il ne correspond à aucun nœud, rien n’est traversé et rien ne se passe.

Dans l’exemple suivant, la règle de modèle correspond à l’élément <route> de la hiérarchie XML. Tous les nœuds contenant un changed attribut sont traités. Tous les <route> éléments contenant un changed attribut sont remplacés par un <new> élément.

L’utilisation de modèles sans nom permet au script d’ignorer l’emplacement d’une balise dans la hiérarchie XML. Par exemple, si vous souhaitez convertir toutes les <author> balises en <div class="author"> balises, l’utilisation de modèles vous permet d’écrire une règle unique qui convertit toutes les <author> balises, quel que soit leur emplacement dans le document XML d’entrée.

Pour plus d’informations sur l’utilisation de modèles sans nom dans les scripts, consultez xsl:template match="/ » Modèle.

Modèles nommés

Les modèles nommés fonctionnent comme des fonctions dans les langages de programmation traditionnels, bien qu’avec une syntaxe détaillée. Lorsque la complexité d’un script augmente ou qu’un segment de code apparaît à plusieurs endroits, vous pouvez modulariser le code et créer des modèles nommés. Comme les fonctions, les modèles nommés acceptent les arguments et ne s’exécutent que lorsqu’ils sont explicitement appelés.

Vous créez un modèle nommé en utilisant l’élément <xsl:template> et en définissant l’attribut name , qui est similaire à un nom de fonction dans les langages de programmation traditionnels. Utilisez la <xsl:param> balise et son name attribut pour définir les paramètres du modèle nommé, et éventuellement inclure l’attribut pour déclarer les select valeurs par défaut pour chaque paramètre. L’attribut select peut contenir des expressions XPath. Si l’attribut select n’est pas défini, le paramètre s’applique par défaut à une chaîne vide.

L’exemple suivant crée un modèle nommé my-template et définit trois paramètres, dont l’un par défaut pour la chaîne falseet l’un par défaut le contenu du nœud d’élément nommé name qui est un enfant du nœud de contexte actuel. Si le script appelle le modèle et ne passe pas dans un paramètre, la valeur par défaut est utilisée.

Pour appeler un modèle nommé dans un script, utilisez l’élément <xsl:call-template> . L’attribut name est requis et définit le nom du modèle appelé. Une fois traité, l’élément <xsl:call-template> est remplacé par le contenu de l’élément qu’il <xsl:template> nomme.

Lorsque vous appelez un modèle nommé, vous pouvez transmettre des arguments dans le modèle en incluant l’élément <xsl:with-param> enfant et en spécifiant l’attribut name . La valeur de l’attribut <xsl:with-param> name doit correspondre à un paramètre défini dans le modèle réel, sinon le paramètre est ignoré. Vous pouvez éventuellement définir une valeur pour chaque paramètre avec l’attribut select ou le contenu de l’élément <xsl:with-param> . Si vous ne définissez pas de valeur pour le paramètre dans l’environnement d’appel, le script transmet la valeur actuelle du paramètre s’il a été initialisé précédemment, ou il génère une erreur si le paramètre n’a jamais été déclaré. Pour plus d’informations sur la transmission des paramètres, consultez présentation des paramètres XSLT.

Dans l’exemple suivant, le modèle my-template est appelé avec le paramètre c contenant le contenu du nœud d’élément nommé other-name qui est un enfant du nœud de contexte actuel.

Pour obtenir un exemple montrant comment utiliser des modèles nommés dans un script de validation, consultez l’exemple : exiger et restreindre les déclarations de configuration.