variabili - Riconoscere la prima esecuzione del ciclo in XSLT




xslt xsl template match (2)

Sono abbastanza nuovo per XSLT e potrebbe guardare il mio problema dall'angolo sbagliato - proveniente da linguaggi come C ++ e Java. Spero che qualcuno possa darmi una mano.

Voglio fare una chiamata in loop (xsl: for-each) in XSLT e fare qualcosa di specifico alla prima esecuzione del ciclo. In altre lingue userei una variabile di stato per questo, ma le variabili non possono cambiare il loro valore in XSLT come ho imparato, quindi come posso risolvere questo problema? Ecco cosa voglio fare. La parte maiuscola nella clausola if è ovviamente falsa e rappresenta il mio problema.

<xsl:for-each select="browser/value">
 <xsl:if test="FIRST TIME IN LOOP">
  do something once
 </xsl:if>

 <xsl:value-of select="current()" />
</xsl:for-each>

Molte grazie! Henrik


Cerca di evitare di pensare al "tempo". Non c'è la prima volta, perché l'esecuzione dell'XSLT non viene ordinata in tempo. Ma c'è un primo elemento nella sequenza di input, e puoi dire quando stai elaborando il primo elemento nella sequenza testando position () = 1.


Penso che il modo più semplice sia controllare la posizione del nodo corrente. È anche più veloce di controllare l'esistenza degli elementi del valore precedente nell'albero (e funzionerà ancora se xsl:sort è aggiunto al ciclo):

<xsl:for-each select="browser/value">
  <xsl:if test="position()=1">
    do something here
  </xsl:if>
  <xsl:value-of select="blah"/>
</xsl:for-each>




foreach