• Aucun résultat trouvé

Je vous avais promis que l'étude de la fonction <xsl:call-template /> nous permettrait de mettre en application nos connaissances sur les variables, chose que nous n'avons pas encore faite. Il est donc temps de passer aux choses sérieuses !

A l'appel d'un template, il est possible de lui faire passer des paramètres que nous utiliserons comme des variables dans le template appelé. Ces paramètres sont tout simplement des informations que l'on souhaite transmettre au template appelé. Ainsi, il sera par exemple possible de lui faire passer le nom d'une personne afin de l'afficher. Les paramètres s'utilisent exactement comme les variables à ceci près qu'ils se déclarent grâce à la fonction <xsl:with-param />. Tout comme la fonction

<xsl:variable /> accepte deux attributs :

Name : c'est le nom que l'on souhaite donner à l'attribut, ce nom va nous permettre de l'identifier de manière unique. Select : cet attribut optionnel accepte soit une expression XPath qui permet de sélectionner la valeur que l'on souhaite stocker dans notre variable, soit une chaîne de caractères.

Code : XML

<xsl:with-param name="nom_du_parametre" select="expression XPath|chaîne de caractères" />

Voyons alors comment faire passer les paramètres à un template appelé : Code : XML

<xsl:call-template name="nom_du_template">

<xsl:with-param name="parametre_un">valeur 1</xsl:with-param>

<xsl:with-param name="parametre_deux">valeur 1</xsl:with-param> </xsl:call-template>

Comme vous pouvez le constater, il convient simplement d'encapsuler les fonctions <xsl:with-param /> dans la fonction

<xsl:call-template />. Nous devons encapsuler autant de fonctions <xsl:with-param /> que nous voulons de paramètres.

Ce n'est pas tout ! Nous devons également déclarer les paramètres au niveau du template appelé. La déclaration des paramètres attendus par un template ne se fait plus avec la fonction <xsl:with-param />, mais la fonction <xsl:param /> qui accepte deux attributs :

Name : c'est le nom du paramètre que l'on attend.

Select : cet attribut optionnel accepte soit une expression XPath, soit une chaîne de caractères et permet de définir une valeur par défaut au paramètre.

Code : XML

<xsl:param name="nom_du_parametre" select="expression XPath|chaîne de caractères" />

Ainsi, si j'appelle un template de la manière suivante : Code : XML

<xsl:call-template name="nom_du_template">

<xsl:with-param name="parametre_un">valeur 1</xsl:with-param>

<xsl:with-param name="parametre_deux">valeur 1</xsl:with-param> </xsl:call-template>

le template appelé bien contenir les 2 paramètres attendus : Code : XML

<xsl:template name="nom_du_template">

<xsl:param name="parametre_un" />

<xsl:param name="parametre_deux" /> </xsl:call-template>

Comme pour les variables, pour pouvoir utiliser un paramètre et récupérer la valeur qu'il contient, il convient de précéder son nom par le symbole "$".

Je vous propose de terminer ce chapitre par un exemple. Pour cet exemple, nous allons exploiter le document XML suivant : Code : XML

<?xml version="1.0" encoding="UTF-8" ?>

<?xml-stylesheet type="text/xsl" href="transformation.xsl" ?> <repertoire>

<!-- John DOE -->

<personne sexe="masculin">

<nom>DOE</nom>

<prenom>John</prenom>

</personne>

<!-- Marie POPPINS --> <personne sexe="feminin">

<nom>POPPINS</nom>

<prenom>Marie</prenom>

</personne>

<!-- Batte MAN -->

<personne sexe="masculin">

<nom>MAN</nom>

<prenom>Batte</prenom>

</personne> </repertoire>

Nous allons écrire un document XSLT contenant deux templates :

Le premier template capturera la racine du document XML et construira la structure du document HTML à produire. Il bouclera également sur chaque personne du document XML et appellera un second template en lui donnant paramètre le nom de chaque personne.

Le second template accueillera 2 paramètres. Le premier sera le nom de la personne tandis que le deuxième aura pour valeur par défaut la chaîne de caractères "nom de la personne". Le but de ce second template sera d'afficher le nom de la personne.

Voici à quoi ressemble notre document XSLT : Code : XML

<xsl:template match="/">

<html>

<head>

<title>Test de la fonction call-template</title> </head>

<body>

<xsl:for-each select="repertoire/personne">

<xsl:call-template name="afficherNom">

<xsl:with-param name="nomFamille" select="nom" />

</xsl:call-template>

</xsl:for-each>

</body>

</html>

</xsl:template>

<xsl:template name="afficherNom">

<xsl:param name="nomFamille" />

<xsl:param name="constante">nom de la personne</xsl:param>

<p><xsl:value-of select="$constante"/>:<xsl:value-of

select="$nomFamille"/></p> </xsl:template>

Le document HTML produit est alors le suivant : Code : HTML

<!DOCTYPE html

PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/html4/strict.dtd"> <html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Test de la fonction call-template</title>

</head> <body> <p>nom de la personne:DOE</p> <p>nom de la personne:POPPINS</p> <p>nom de la personne:MAN</p> </body> </html>

D'autres fonctions

La fonction element

Définition

La fonction <xsl:element /> est une fonction que nous utiliserons principalement pour transformer un document XML en un nouveau document XML. En effet, comme son nom le laisse deviner, cette fonction permet de créer un élément au sens XML, c'est-à-dire une balise XML.

Cette fonction accepte plusieurs attributs. Dans le cadre de ce cours, deux nous intéressent :

L'attribut "name", obligatoire, permet de définir le nom de l'élément XML que l'on souhaite créer. Ce nom peut-être une chaîne de caractères ou encore la valeur d'une variable.

L'attribut "namespace", facultatif quant à lui, permet de préfixer l'élément à créer d'un espace de noms.

La syntaxe de la fonction <xsl:element /> est donc la suivante : Code : XML

<xsl:element name="nom" namespace="espace_de_nom" />

A noter : pour définir une valeur à l'élément, il convient tout simplement de la placer entre la balise ouvrante et fermante de la fonction :

Code : XML

<xsl:element name="nom" namespace="espace_de_nom">valeur de l'élément </xsl:element>

Exemple

Afin d'illustrer l'utilisation de cette nouvelle fonction, je vous propose de voir immédiatement un exemple. Nous allons donc écrire un template dont le rôle est de créer un élément XML ayant pour nom "couleur" et pour valeur "rouge".

Dans cet exemple, je ne vais détailler ici que le template, mais dans le document XSLT complet, il convient de décrire le document à produire comme un document XML.

<xsl:template match="/">

<xsl:element name="couleur">rouge</xsl:element> </xsl:template>

Le document XML produit est alors le suivant : Code : XML

<?xml version="1.0" encoding="utf-8"?> <couleur>rouge</couleur>

Documents relatifs