2008-09-26 16 views
0

J'ai un fichier xsl qui saisit des variables de xml et ils ne semblent pas pouvoir se voir. Je sais que c'est une question de portée, je ne sais pas ce que je fais de mal.xsl scope help

<xsl:template match="one"> 
<xsl:variable name="varOne" select="@count" /> 
</xsl:template> 

<xsl:template match="two"> 
<xsl:if test="$varOne = 'Y'"> 
    <xsl:value-of select="varTwo"/> 
</xsl:if> 
</xsl:template> 

Ceci a été simplifié pour ici.

Toute aide est appréciée.

Répondre

2

Se souvenir que les variables xsl sont immuables ...

<!-- You may want to use absolute path --> 
<xsl:variable name="varOne" select="one/@count" /> 

<xsl:template match="one"> 
<!-- // do something --> 
</xsl:template> 

<xsl:template match="two"> 
<xsl:if test="$varOne = 'Y'"> 
    <xsl:value-of select="varTwo"/> 
</xsl:if> 
</xsl:template> 
+0

Immuable est probablement un meilleur terme que statique final. – Kev

2

Je suis à peu près certain que les variables sont étendues et donc vous ne pouvez pas déclarer une variable dans une, puis l'utiliser dans l'autre. Vous allez devoir déplacer votre déclaration de variable hors du modèle afin qu'elle soit dans une plus grande portée que les deux.

3

Vous pouvez également résoudre certains problèmes de portée en passant des paramètres ...

<xsl:apply-templates select="two"> 
<xsl:with-param name="varOne"> 
    <xsl:value-of select="one/@count"/> 
</xsl:with-param> 
</xsl:apply-templates> 

<xsl:template match="two"> 
<xsl:param name="varOne"/> 
<xsl:if test="$varOne = 'Y'"> 
    <xsl:value-of select="varTwo"/> 
</xsl:if> 
</xsl:template> 
2

La portée d'une variable dans XSLT est son englobante élément. Pour rendre une variable visible à plusieurs éléments, sa déclaration doit être au même niveau ou plus haut que ces éléments.