Question

J'ai un fichier xsl qui récupère des variables de xml et elles ne semblent pas pouvoir se voir. Je sais que c'est une question de portée, je ne sais tout simplement pas ce que je fais de mal.

<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.

Était-ce utile?

La solution

Rappelez-vous 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>

Autres conseils

Vous pouvez également résoudre certains problèmes de portée en transmettant 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>

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top