Toon posts:

[XSL] Var in XSL:IF setten voor hele template

Pagina: 1
Acties:

Verwijderd

Topicstarter
De volgende code:
code:
1
2
3
4
5
6
7
8
9
<xsl:variable name="myVar">TEST</xsl:variable>

<xsl:if test = "@parameter&gt; 0 " >
    <xsl:variable name="myVar">VERANDERD</xsl:variable>
    <xsl:value-of select="$myVar"/> - <xsl:value-of select="@parameter"/>
    <br/>
</xsl:if>

<xsl:value-of select="$myVar"/> - <xsl:value-of select="@parameter"/>
levert deze output op:
code:
1
2
3
4
5
6
TEST
TEST
VERANDERD - 1
TEST - 1
VERANDERD- 2
TEST - 2

Ik wil echter dat als er een waarde voor 'parameter' is geset dat de waarde van 'myVar' veranderd in het hele template en niet alleen in de scope van de xsl:if. Hoe doe je dat?

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

drm

f0pc0dert

Ik heb het vermoeden dat je een niet zo erge XSL-like benadering van je probleem hebt. Dit is namelijk iets wat je in XSL helemaal niet nodig zou moeten hebben.

Anyhow, als je dit wilt, waarom zet je de xsl:if dan niet gewoon in de xsl:variable ?

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


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
De code die jij geeft kan echt niet die output opleveren. Voor de eerste twee keer TEST zie ik nergens een value-of statement of apply-templates. Zou je overigens een de gehele template kunnen geven en ook erbij vertellen hoe je hem aanroept want ik vind het een beetje vaag zo.

Noushka's Magnificent Dream | Unity


Verwijderd

zoals DRM al zegt, is het correct.

Je kan een xsl:param en xsl:variable namelijk niet van waarde laten veranderen als deze reeds gezet is.

Verwijderd

Topicstarter
drm schreef op 03 juni 2004 @ 18:51:
Ik heb het vermoeden dat je een niet zo erge XSL-like benadering van je probleem hebt. Dit is namelijk iets wat je in XSL helemaal niet nodig zou moeten hebben.

Anyhow, als je dit wilt, waarom zet je de xsl:if dan niet gewoon in de xsl:variable ?
Een beetje logica in je XSLT moet kunnen, hierdoor kan ik het stylesheet op meerdere manieren toepassen. Of is dit heilig schennis? xsl:if gewoon in de xsl:variable was mogelijk na wat aanpassingen.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Je kan het vaak op twee manieren oplossen:
code:
1
2
3
4
5
6
7
8
9
10
<xsl:template match="item">
  <xsl:choose>
    <xsl:when test="@parameter &gt; 0">
      ...
    </xsl:when>
    <xsl:otherwise>
      ...
    </xsl:otherwise
  </xsl:choose>
</xsl:template>

of
code:
1
2
3
4
5
6
7
<xsl:template match="item">
  ...
</xsl:template>

<xsl:template match="item[@parameter &gt; 0]">
  ...
</xsl:template>

Ik weet alleen nog steeds niet of dit nou relevant is voor je probleem. Ik zie 6 output statements staan, waarvan twee (de eerste) niet door de gegeven code ge-output kunnen zijn, omdat er geen streepje achter staat. Mischien kun je de gehele template geven en de XML die je probeert te transformeren en waarom je dat probeert te doen. Mischien weet iemand dan nog wel een mooiere oplossing.

Noushka's Magnificent Dream | Unity


Verwijderd

Topicstarter
Michali schreef op 07 juni 2004 @ 13:14:
Ik weet alleen nog steeds niet of dit nou relevant is voor je probleem. Ik zie 6 output statements staan, waarvan twee (de eerste) niet door de gegeven code ge-output kunnen zijn, omdat er geen streepje achter staat. Mischien kun je de gehele template geven en de XML die je probeert te transformeren en waarom je dat probeert te doen. Mischien weet iemand dan nog wel een mooiere oplossing.
Die streepjes ontbreken, maar die horen er inderdaad wel achter, dit is een copy&paste uit een andere versie. Nevermind, ik heb het probleem al verholpen met een soortgelijke oplossing.
Pagina: 1