[xsl] Variabele ophogen

Pagina: 1
Acties:

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-05 13:50
Waarom is het niet mogelijk om dit te doen:

code:
1
2
<xsl:variable name="count" value="0"/> 
<xsl:variable name="count" value="$count+1"/>


Misschien een beetje een krom voorbeeld, maar in zo'n geval krijg je een herdefinitie fout (opzich logisch). Bestaat er iets als xsl:set waarmee je zo'n variabele alsnog kunt aanpassen, of denk ik nu niet helder na?

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Wat je kunt doen is een template maken die zichzelf aanroept (recursief dus), en als parameter een opgehoogde versie van de variable meegeven.

code:
1
2
3
4
5
6
<xsl:template name="flappie">
   <xsl:param name="crap" />
   <xsl:call-template name="flappie">
      <xsl:with-param name="crap" value="$crap + 1" />
   </xsl:call-template>
</xsl:template>


Zoiets. Uit het bolle hoofd, maar dit zou je op weg moeten helpen.

Rustacean


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

euh, is dat niet een beetje oneindige recursie wat je daar doet :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-05 13:50
Dat je 'm op die manier kunt ophogen weet ik, maar dat wil ik juist niet. Trouwens inderdaad een redelijk oneindig loopje, maar ik neem aan dat het alleen om het idee ging.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

iCe01 schreef op donderdag 25 november 2004 @ 18:52:
Dat je 'm op die manier kunt ophogen weet ik, maar dat wil ik juist niet. Trouwens inderdaad een redelijk oneindig loopje, maar ik neem aan dat het alleen om het idee ging.
Ging inderdaad om het idee, je moet uiteraard een eind-conditie hebben.

Maar waarom wil je het niet op deze manier doen?

[ Voor 8% gewijzigd door djc op 25-11-2004 19:11 ]

Rustacean


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-05 13:50
Het gaat om een template dat aan de hand van de gegevens wel of geen data weergeeft. Wanneer ik data weergeef wil ik dat het aantal weergegeven items opgehoogd wordt, anders niet.

Zou je zeggen dan kopieer je je call-template en pas je het daar aan, maar dat gaat niet omdat het een en ander in loopjes ingebouwd zit. Ik zou wel een codeknipje kunnen plaatsen, maar het is nu onderhand zo'n rommel geworden dat dat geen zin meer heeft.

Update; kleine codesnip:

code:
1
2
3
4
5
6
7
8
9
10
11
<xsl:template name="displayjobs"> 
  <xsl:param name="index"/>
  <xsl:param name="displayed"/>
  <xsl:for-each select="/GLKS/JOBLIST/job[$index]/crewlist/*"> 
    <xsl:if test="number(./@ID) = number($userID)"> 
       <xsl:call-template name="displayjob">
          <xsl:with-param name="job" select="/GLKS/JOBLIST/job[$index]"/>
       </xsl:call-template>
    </xsl:if>
  </xsl:for-each>
</xsl:template>


Wat je ziet; een loopje loopt een lijstje nodes af. Alleen wanneer aan de conditie voldaan is wordt de call-template aangeroepen en de data afgebeeld.

Nu wil ik daaronder dus het template recursief aanroepen. De index parameter wordt in elk geval verhoogd, maar de displayed parameter moet alleen verhoogd worden wanneer het "displayjob" template ook daadwerkelijk aangeroepen is. Ik zit me een beetje blind te staren, misschien zie ik een andere oplossing over het hoofd?

[ Voor 53% gewijzigd door jsiegmund op 25-11-2004 19:23 ]


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

iCe01 schreef op donderdag 25 november 2004 @ 19:16:
Nu wil ik daaronder dus het template recursief aanroepen. De index parameter wordt in elk geval verhoogd, maar de displayed parameter moet alleen verhoogd worden wanneer het "displayjob" template ook daadwerkelijk aangeroepen is. Ik zit me een beetje blind te staren, misschien zie ik een andere oplossing over het hoofd?
Uhm, je kan toch een xsl:choose om je xsl:with-param zetten en dan in de xsl:when $displayed + 1 doorgeven en in de xsl:otherwise gewoon $displayed?

Rustacean


Verwijderd

zoals Manuzhai al zegt, that's the way to do it

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-05 13:50
En hoe wil je dan testen of het template inderdaad aangeroepen is? Die choose is het probleem niet, maar de test die je daarbij opgeeft wel.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

iCe01 schreef op vrijdag 26 november 2004 @ 10:30:
En hoe wil je dan testen of het template inderdaad aangeroepen is? Die choose is het probleem niet, maar de test die je daarbij opgeeft wel.
Je zet de choose in het aanroepende stukje code, niet in het aan te roepen stukje code.

Rustacean


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-05 13:50
Ah sorry, na het nog eens overgelezen te hebben snap ik wat je bedoeld. Maar xsl:choose mag je niet gebruiken binnen xsl:call-template dus dat feest gaat helaas niet door.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

iCe01 schreef op vrijdag 26 november 2004 @ 16:14:
Ah sorry, na het nog eens overgelezen te hebben snap ik wat je bedoeld. Maar xsl:choose mag je niet gebruiken binnen xsl:call-template dus dat feest gaat helaas niet door.
Hm, maar wellicht kan je de xsl:call-template in de xsl:choose zetten? Heb je hetzelfde effect.

Rustacean

Pagina: 1