Élément <xsl:param>
Déclare un paramètre nommé à utiliser dans un élément <xsl:stylesheet> ou <xsl:template>. Permet de spécifier une valeur par défaut.
<xsl:param
name = QName
select = Expression
</xsl:param>
Attributs
name
Requis. Spécifie le Noms qualifiés (XSLT) du paramètre.select
La valeur de l'attribut est une Expressions (XSLT), et la valeur de la variable est l'objet qui résulte de l'évaluation de l'expression. Lorsque cet attribut est spécifié, l'élément <xsl:param> doit être vide.
Informations sur les éléments
Nombre d'occurrences |
Illimité |
Éléments parents |
|
Éléments enfants |
xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:for-each, xsl:if, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, éléments de sortie |
Notes
La valeur spécifiée dans l'élément <xsl:param> est une valeur par défaut à des fins de liaison. Lorsque le modèle ou la feuille de style contenant <xsl:param> est appelée, des paramètres sont transmis, qui sont utilisés à la place des valeurs par défaut.
L'élément <xsl:param> doit être déclaré comme un enfant immédiat d'un élément <xsl:template>. S'il n'est pas déclaré comme un enfant immédiat, la valeur de l'élément <xsl:param> n'est pas accessible et une erreur se produit. Par exemple :
<xsl:template name="getcount">
<xsl:element name="strong">
<xsl:param name="counted">
<xsl:value-of select="count(//book)"/>
</xsl:param>
Total Book Count: <xsl:value-of select="$counted"/>
</xsl:element>
</xsl:template>
Dans l'exemple ci-dessus, le seul enfant immédiat de l'élément <xsl:template> est l'élément <strong>. Dès lors, la valeur de l'élément <xsl:param> ne peut pas être correctement évaluée par l'analyseur et l'erreur suivante est produite :
Notes
Le mot clé xsl:param ne peut pas être utilisé ici.
La façon correcte de placer cet élément de sorte qu'il puisse être évalué dans le contexte de l'élément <xsl:template> est la suivante :
<xsl:template name="getcount">
<xsl:param name="counted">
<xsl:value-of select="count(//book)"/>
</xsl:param>
<xsl:element name="strong">
Total Book Count: <xsl:value-of select="$counted"/>
</xsl:element>
La valeur du paramètre peut être un objet de n'importe quel type pouvant être retourné par une expression. L'élément <xsl:param> peut spécifier la valeur de la variable de trois façons :
Si l'élément possède un attribut select, la valeur de l'attribut doit être une expression et la valeur du paramètre est l'objet qui résulte de l'évaluation de l'expression. Dans ce cas, le contenu de l'élément doit être vide.
Si l'élément n'a pas d'attribut select et a un contenu non vide, par exemple s'il contient un ou plusieurs nœuds enfants, c'est ce contenu qui spécifie la valeur. Le contenu est un modèle qui est instancié pour fournir la valeur du paramètre. La valeur est un fragment d'arborescence résultat équivalent à une collection de nœuds qui contient juste un seul nœud racine ayant pour enfants la séquence de nœuds produite par l'instanciation du modèle. L'URI de base des nœuds contenus dans le fragment d'arborescence résultat est l'URI de base de l'élément.
Une erreur se produit si un membre de la séquence de nœuds créé par l'instanciation du modèle est un nœud d'attribut ou un nœud d'espace de noms, car un nœud racine ne peut pas avoir pour enfant un nœud d'attribut ou un nœud d'espace de noms.
Si le contenu est vide et n'a pas d'attribut select, la valeur du paramètre est une chaîne vide. Donc
<xsl:param name="x"/>
est équivalent à
<xsl:param name="x" select="''"/>
Lorsqu'un paramètre est utilisé pour sélectionner des nœuds par leur position, veillez à éviter ceci :
<xsl:param name="n">2</xsl:param> ... <xsl:value-of select="item[$n]"/>
Ce code produira la valeur du premier élément, car la variable « n » sera liée à un fragment d'arborescence résultat, pas à un nombre. Utilisez plutôt
<xsl:param name="n" select="2"/> ... <xsl:value-of select="item[$n]"/>
ou
<xsl:param name="n">2</xsl:param> ... <xsl:value-of select="item[number($n)]"/>
Voici une façon pratique de spécifier la collection de nœuds vide comme valeur par défaut d'un paramètre. <xsl:param name="x" select="/.."/>
Exemple
Cet exemple définit un modèle nommé pour un « bloc numéroté » avec un argument pour contrôler le format du numéro.
Fichier XML (catmat.xml)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="paramelem.xsl"?>
<lists>
<ol>
<li>the</li>
<li>cat</li>
<ol>
<li>sat</li>
<li>on</li>
<li>the</li>
</ol>
<li>mat</li>
</ol>
</lists>
Fichier XSLT (paramelem.xsl)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="paramelem.xsl"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="ol/li">
<br/>
<xsl:call-template name="numbered-block"/>
</xsl:template>
<xsl:template match="ol//ol/li">
<br/>   
<xsl:call-template name="numbered-block">
<xsl:with-param name="format">a. </xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="numbered-block">
<xsl:param name="format">1. </xsl:param>
<fo:block>
<xsl:number format="{$format}"/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
Sortie
Voici les données en sortie formatées :
1. the 2. cat a. sat b. on c. the 3. mat
Voici les données en sortie du processeur ; un espace blanc a été ajouté pour plus de clarté.
<?xml version="1.0" encoding="UTF-16"?>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">1. the</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">2. cat</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">a. sat</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">b. on</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">c. the</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">3. mat</fo:block>