Domanda
Ho un file xsl che sta acquisendo variabili da XML e sembra che non riescano a vedersi. So che è un problema di portata, semplicemente non so cosa sto facendo di sbagliato.
<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>
Questo è stato semplificato per qui.
Qualsiasi aiuto è apprezzato.
Soluzione
Ricordando che le variabili xsl sono immutabili ...
<!-- 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>
Altri suggerimenti
Puoi anche risolvere alcuni problemi di scoping passando parametri ...
<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>
Sono abbastanza certo che le variabili abbiano un ambito e quindi non puoi dichiarare una variabile in una e poi usarla nell'altra. Dovrai spostare la tua dichiarazione di variabili fuori dal modello in modo che rientri in un ambito più ampio di entrambi.
L'ambito di una variabile in XSLT è il suo elemento che lo racchiude. Per rendere una variabile visibile a più elementi, la sua dichiarazione deve essere allo stesso livello o superiore a tali elementi.