2012-06-30 15 views
5

Come passare le variabili tra due modelli in XSLT.Come passare le variabili tra due modelli in XSLT

Non riesco a utilizzare la variabile globale perché il valore della variabile dipende dal nodo corrente in valutazione.

Dire che ho XSLT di sorta:

<xsl:template match="product"> 
<xsl:variable name="pr-pos" select="count(./preceding-sibling::product)+1"/> 
.. 
.. 
.. 
<xsl:apply-templates select="countries/country"/> 
</xsl:template> 

<xsl:template match="countries/country"> 
<tr id="country-id"> 
    <td><a href="#" class="action" id="{concat('a-',$pr-pos)}">+</a></td> 
.. 
.. 

Questo dà errore da $ pr-pos non è accessibile in secondo modello.

Come si passa il valore di variabile pr-pos a un altro modello? Come posso fare questo?

+0

Nel tuo caso non hai davvero bisogno di passare una variabile. Il valore di '$ pr-pos' che desideri passare è distinguibile dal modello' country'. – Utkanos

+0

Tutti i linguaggi di programmazione (beh, la maggior parte) hanno un mezzo per passare informazioni a un'altra unità di esecuzione e imparare come farlo è uno dei fondamenti. Questa domanda equivale approssimativamente a chiedere, come passare le variabili tra due funzioni in JavaScript o dire "Ho provato a' function a() {var i = 5; b();} function b() {alert (i); } 'ma' i' non è accessibile in seconda funzione. " –

+0

@torazaburo: non ne ho trovato uno utile che mi spieghi come farlo su google.Non sapevo che è per questo che è stato chiesto, se hai problemi da persone che fanno domande perché non disabiliti il ​​tuo account su StackOverflow. Cerca su google e dimmi che trovi qualche buon documento su questa diversa dalla documentazione di w3. – Harshdeep

risposta

10
<xsl:template match="product"> 
    <xsl:variable name="pr-pos" select="count(./preceding-sibling::product)+1"/> 
    .. 
    .. 
    .. 
    <xsl:apply-templates select="countries/country"> 
     <xsl:with-param name="pr-pos" select="$pr-pos" /> 
    </xsl:apply-templates> 
</xsl:template> 

<xsl:template match="countries/country"> 
    <xsl:param name="pr-pos" /> 
    <tr id="country-id"> 
     <td><a href="#" class="action" id="{concat('a-',$pr-pos)}">+</a></td> 
     .. 
     .. 
+0

Ho cercato un po 'di più e ho fatto esattamente la stessa cosa, prima di verificare la risposta su StackOverflow e ha funzionato. Allora grazie per il tuo aiuto :) – Harshdeep

Problemi correlati