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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top