<html>
<head>


<title>&lt;xsl:variable&gt;</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div id="Description">
<table cellpadding="0" cellspacing="0" border="0" width="100%" class="main">
<tr>
<td valign="top" class="NAME">&lt;xsl:variable&gt;</td>
<td valign="top" class="COMPATIBILITY">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="divider"><img src="dwres:18084" width="100%" height="1"></td>
</tr>
<tr>
<td valign="top" colspan="2" class="description">
D&eacute;finit une variable. Si l'&eacute;l&eacute;ment <span class="LITERAL">&lt;xsl:variable&gt;</span> appara&icirc;t comme &eacute;l&eacute;ment de niveau sup&eacute;rieur, il s'agit d'une variable globale accessible dans toute la feuille de style. Sinon, la variable est locale et ne figure que dans l'&eacute;l&eacute;ment contenant l'attribut <span class="LITERAL">&lt;xsl:variable&gt;</span>. La valeur de cette variable peut &ecirc;tre d&eacute;finie de l'une des deux mani&egrave;res suivantes&nbsp;:  sp&eacute;cifi&eacute;e dans l'attribut <span class="LITERAL">select</span>, ou bien d&eacute;finie dans un mod&egrave;le XSLT dans l'&eacute;l&eacute;ment <span class="LITERAL">&lt;xsl:variable&gt;</span> lui-m&ecirc;me. Si aucune de ces m&eacute;thodes n'est utilis&eacute;e, la valeur de la variable est une cha&icirc;ne vide.</td></tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Cat&eacute;gorie</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>Soit un &eacute;l&eacute;ment de niveau sup&eacute;rieur, soit une instruction</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Attributs obligatoires</td>
</tr>
<tr>
<td colspan="2" class="description">
<dl>
<dt>
name
</dt>
<dd>
Un attribut qui affecte un nom &agrave; cette variable.
<P></p>
</dl>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Attributs facultatifs</td>
</tr>
<tr>
<td colspan="2" class="description">
<dl>
<dt>
select
</dt>
<dd>
Une expression XPath qui d&eacute;finit la valeur de cette variable.
<P></p>
</dl>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Contenu</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>L'&eacute;l&eacute;ment <span class="LITERAL">&lt;xsl:variable&gt;</span> peut &ecirc;tre vide, ou bien contenir un mod&egrave;le XSLT. S'il contient un mod&egrave;le XSLT, la valeur de l'attribut <span class="LITERAL">select</span> (le cas &eacute;ch&eacute;ant) est ignor&eacute;e.</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Appara&icirc;t dans</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>
<span class="LITERAL">&lt;xsl:stylesheet&gt;</span> comme &eacute;l&eacute;ment de niveau sup&eacute;rieur ou dans un mod&egrave;le.</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">D&eacute;fini dans</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>XSLT section 11, Variables et param&egrave;tres. </p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Exemple</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>La feuille de style suivante d&eacute;finit plusieurs variables&nbsp;:</p>
<span class="PROGRAMLISTING"><pre>
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;

  &lt;xsl:output method=&quot;text&quot;/&gt;

  &lt;xsl:variable name=&quot;newline&quot;&gt;
&lt;xsl:text&gt;
&lt;/xsl:text&gt;
  &lt;/xsl:variable&gt;

  &lt;xsl:variable name=&quot;favoriteNumber&quot; select=&quot;23&quot;/&gt;
  &lt;xsl:variable name=&quot;favoriteColor&quot; select=&quot;'blue'&quot;/&gt;
  &lt;xsl:variable name=&quot;complicatedVariable&quot;&gt;
    &lt;xsl:choose&gt;
      &lt;xsl:when test=&quot;count(//listitem) &gt; 10&quot;&gt;
        &lt;xsl:text&gt;really long list&lt;/xsl:text&gt;
      &lt;/xsl:when&gt;
      &lt;xsl:when test=&quot;count(//listitem) &gt; 5&quot;&gt;
        &lt;xsl:text&gt;moderately long list&lt;/xsl:text&gt;
      &lt;/xsl:when&gt;
      &lt;xsl:otherwise&gt;
        &lt;xsl:text&gt;fairly short list&lt;/xsl:text&gt;
      &lt;/xsl:otherwise&gt;
    &lt;/xsl:choose&gt;
  &lt;/xsl:variable&gt;

  &lt;xsl:template match=&quot;/&quot;&gt;
    &lt;xsl:text&gt;Hello!  Your favorite number is &lt;/xsl:text&gt;
    &lt;xsl:value-of select=&quot;$favoriteNumber&quot;/&gt;
    &lt;xsl:text&gt;.&lt;/xsl:text&gt;
    &lt;xsl:value-of select=&quot;$newline&quot;/&gt;
    &lt;xsl:text&gt;Your favorite color is &lt;/xsl:text&gt;
    &lt;xsl:value-of select=&quot;$favoriteColor&quot;/&gt;
    &lt;xsl:text&gt;.&lt;/xsl:text&gt;
    &lt;xsl:value-of select=&quot;$newline&quot;/&gt;
    &lt;xsl:value-of select=&quot;$newline&quot;/&gt;
    &lt;xsl:text&gt;Here is a &lt;/xsl:text&gt;
    &lt;xsl:value-of select=&quot;$complicatedVariable&quot;/&gt;
    &lt;xsl:text&gt;:&lt;/xsl:text&gt;
    &lt;xsl:value-of select=&quot;$newline&quot;/&gt;
    &lt;xsl:variable name=&quot;listitems&quot; select=&quot;list/listitem&quot;/&gt;
    &lt;xsl:call-template name=&quot;processListitems&quot;&gt;
      &lt;xsl:with-param name=&quot;items&quot; select=&quot;$listitems&quot;/&gt;
    &lt;/xsl:call-template&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;processListitems&quot;&gt;
    &lt;xsl:param name=&quot;items&quot;/&gt;
    &lt;xsl:variable name=&quot;favoriteColor&quot;&gt;
      &lt;xsl:text&gt;chartreuse&lt;/xsl:text&gt;
    &lt;/xsl:variable&gt;
    
    &lt;xsl:text&gt;    (Your favorite color is now &lt;/xsl:text&gt;
    &lt;xsl:value-of select=&quot;$favoriteColor&quot;/&gt;
    &lt;xsl:text&gt;.)&lt;/xsl:text&gt;
    &lt;xsl:value-of select=&quot;$newline&quot;/&gt;
    &lt;xsl:for-each select=&quot;$items&quot;&gt;
      &lt;xsl:value-of select=&quot;position()&quot;/&gt;
      &lt;xsl:text&gt;.  &lt;/xsl:text&gt;
      &lt;xsl:value-of select=&quot;.&quot;/&gt;
      &lt;xsl:value-of select=&quot;$newline&quot;/&gt;
    &lt;/xsl:for-each&gt;
  &lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;</pre></span>
<p>La feuille de style est utilis&eacute;e pour transformer le document suivant&nbsp;:</p>
<span class="PROGRAMLISTING"><pre>
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;list xml:lang=&quot;en&quot;&gt;
  &lt;title&gt;Albums I've bought recently:&lt;/title&gt;
  &lt;listitem&gt;The Sacred Art of Dub&lt;/listitem&gt;
  &lt;listitem&gt;Only the Poor Man Feel It&lt;/listitem&gt;
  &lt;listitem&gt;Excitable Boy&lt;/listitem&gt;
  &lt;listitem xml:lang=&quot;sw&quot;&gt;Aki Special&lt;/listitem&gt;
  &lt;listitem xml:lang=&quot;en-gb&quot;&gt;Combat Rock&lt;/listitem&gt;
  &lt;listitem xml:lang=&quot;zu&quot;&gt;Talking Timbuktu&lt;/listitem&gt;
  &lt;listitem xml:lang=&quot;jz&quot;&gt;The Birth of the Cool&lt;/listitem&gt;
&lt;/list&gt;</pre></span> <!--<?troff .Nd 10?>-->
<p>Les r&eacute;sultats de la transformation sont les suivants&nbsp;:</p>
<span class="PROGRAMLISTING"><pre>
Hello!  Your favorite number is 23.
Your favorite color is blue.

Here is a moderately long list:
    (Your favorite color is now chartreuse.)
1.  The Sacred Art of Dub
2.  Only the Poor Man Feel It
3.  Excitable Boy
4.  Aki Special
5.  Combat Rock
6.  Talking Timbuktu
7.  The Birth of the Cool</pre></span>
<p>Il est judicieux d'examiner certains points de la feuille de style. Tout d'abord, lorsque les valeurs des deux premi&egrave;res variables (<span class="LITERAL">favoriteNumber</span> et <span class="LITERAL">favoriteColor</span>) ont &eacute;t&eacute; d&eacute;finies, il a fallu invoquer la cha&icirc;ne &quot;blue&quot;, mais pas <span class="LITERAL">23</span>. Si <span class="LITERAL">blue</span> n'avait pas &eacute;t&eacute; invoqu&eacute;, le processeur XSLT aurait consid&eacute;r&eacute; qu'il &eacute;tait question de tous les &eacute;l&eacute;ments <span class="LITERAL">&lt;blue&gt;</span> du contexte actuel. Il n'a pas &eacute;t&eacute; n&eacute;cessaire d'invoquer <span class="LITERAL">23</span> car les noms des &eacute;l&eacute;ments XML ne peuvent pas commencer par un nombre. Toujours invoquer des &eacute;l&eacute;ments litt&eacute;raux est une bonne m&eacute;thode, m&ecirc;me ceux qui ne peuvent correspondre &agrave; des noms d'&eacute;l&eacute;ment&nbsp;; les chances que vous appliquiez ce traitement sont minimes &agrave; un moment donn&eacute;. </p>
<p>A noter &eacute;galement, la pr&eacute;sence de deux variables nomm&eacute;es <span class="LITERAL">favoriteColor</span>. L'une est une variable globale car son parent est l'&eacute;l&eacute;ment <span class="LITERAL">&lt;xsl:stylesheet&gt;</span>&nbsp;; l'autre est une variable locale car elle est d&eacute;finie dans un &eacute;l&eacute;ment <span class="LITERAL">&lt;xsl:template&gt;</span>. Acc&eacute;der &agrave; l'&eacute;l&eacute;ment <span class="LITERAL">favoriteColor</span> du mod&egrave;le <span class="LITERAL">match=&quot;/&quot;</span> renvoie une certaine valeur&nbsp;; y acc&eacute;der dans le mod&egrave;le <span class="LITERAL">name=&quot;processListitems&quot;</span> en renvoie une autre. Avoir deux variables poss&eacute;dant le m&ecirc;me nom au m&ecirc;me niveau est une erreur. De m&ecirc;me que d'affecter le m&ecirc;me nom &agrave; un attribut <span class="LITERAL">&lt;xsl:variable&gt;</span> et un attribut <span class="LITERAL">&lt;xsl:param&gt;</span> sur le m&ecirc;me niveau. </p>
<p>Utiliser un &eacute;l&eacute;ment <span class="LITERAL">&lt;xsl:choose&gt;</span> pour initialiser un &eacute;l&eacute;ment <span class="LITERAL">&lt;xsl:variable&gt;</span> est une technique r&eacute;pandue. Elle est &eacute;quivalente &agrave; l'&eacute;l&eacute;ment de programmation proc&eacute;durale suivant&nbsp;:</p>
<span class="PROGRAMLISTING"><pre>
String complicatedVariable;
if (count(listitems) &gt; 10)
  complicatedVariable = &quot;really long list&quot;;
else if (count(listitems)) &gt; 5)
  complicatedVariable = &quot;moderately long list&quot;;
else
  complicatedVariable = &quot;fairly short list&quot;;</pre></span>
<p>Dernier point &agrave; noter, une variable peut &ecirc;tre d'un type quelconque de variable XPath ou XSLT, y compris un ensemble de n&oelig;uds. Lorsque le mod&egrave;le <span class="LITERAL">processListitems</span> est appel&eacute;, le param&egrave;tre qui lui est transmis est une variable contenant l'ensemble de n&oelig;uds de tous les &eacute;l&eacute;ments <span class="LITERAL">&lt;listitem&gt;</span> du document. Dans le mod&egrave;le <span class="LITERAL">processListitems</span>, la variable (un param&egrave;tre du point de vue technique) peut &ecirc;tre utilis&eacute;e dans un &eacute;l&eacute;ment <span class="LITERAL">&lt;xsl:for-each&gt;</span>. </p>
</td>
</tr>
</table>
</div>
</body>
</html>
