Bonjour,

Stocker un jeu de noeud dans une variable est possible si l'on utilise l'attribut select de xsl:variable :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
<xsl:variable name="var" select="//b" />
En revanche, je désire définir le contenu de la variable entre ses balises et non par select, parce que notement, j'ai besoin de tests conditionnels pour le choix de l'affectation, je n'obtient plus un jeu de noeuds.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<xsl:variable name="var">
 <xsl:value-of select="//b" />
</xsl:variable>
Reformuler autrement, j'aimerais bien qu'un call-template puisse me retourner un jeu de noeud, de la même manière.

J'utilise le moteur XSLT de Firefox qui me donne une erreur lorsque j'essaie d'accèder à la propriété p d'un noeud b du code test.xml suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<a>
 <b p="1">x</b>
 <b p="2">y</b>
 <b p="3">z</b>
</a>
le fichier test.xsl étant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
<xsl:output method="html" indent="yes" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />
 
<xsl:template match="/">
 <html>
  <body>
   <xsl:variable name="var">
    <xsl:call-template name="fonction" />
   </xsl:variable>
   <xsl:value-of select="//b[@p = '2']" />
   <br />
   <xsl:value-of select="$var" />
   <br />
   <xsl:value-of select="$var/@p" />
  </body>
 </html>
</xsl:template>
 
<xsl:template name="fonction">
 <xsl:value-of select="//b[@p = '2']" />
</xsl:template>
 
</xsl:stylesheet>
La ligne fautive :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
   <xsl:value-of select="$var/@p" />
Les deux premiers value-of affichent le contenu de la balise b c'est à dire "y". J'ai tenté à tout hasard un copy-of à la place de value-of dans le template "fonction".

Avez vous une solution à ce problème ?


Blustuff.