Variablen ändern
Martin
- xsl
0 Thomas J.S.0 Martin0 Thomas J.S.0 Martin0 Thomas J.S.
0 MudGuard0 Thomas J.S.0 MudGuard
Halli hallo (schon wieder)
ich wollte fragen, ob es irgendwie (ohne engine abhängig zu sein)
möglich ist die variablen zu ändern.
kleines bsp zum verständnis:
ich möchte überprüfen ob eine var <= x ist.
wenn ja, dann soll sie auf x gesetzt werden.
wenn nein, dann soll sie ihren alten wert behalten.
das dumme ist nur, dass ich überall lese, dass variablen wie konstanten zu sehen sind und man sie nicht ändern kann.
und bei parametern nimmer er immer nur den ersten wert.
mein 2ter ansatz war es, dass ich einfach das "normale" template als mode="after_check" aufrufen lasse und ein neues mit dem selben namen davor setze, dass das "normale" aufruft.
dort sollte dann eine choose abfrage gemacht werden.
wenn var <= x dann sollte er das template "after_check" mit den parametern aufrufen in denen var = x wird. andernfalls soll er "after_check" mit den normalen werten aufrufen.
allerdings geht das bei mir auch nicht richtig.
vll kennt ja von euch wer einen kleinen trick um das zu managen :)
danke,
martin
Hallo,
ich wollte fragen, ob es irgendwie (ohne engine abhängig zu sein)
möglich ist die variablen zu ändern.
das dumme ist nur, dass ich überall lese, dass variablen wie konstanten zu sehen sind und man sie nicht ändern kann.
Stimmt.
und bei parametern nimmer er immer nur den ersten wert.
Wer sagt das?
mein 2ter ansatz war es,
allerdings geht das bei mir auch nicht richtig.
Bitte ein Beispiel von dem was du versucht hast, ich kann deine Erklärung leider nicht nachvollziehen.
<xsl:template name="after_check">
<xsl:param name="ParamerterVonVariable" />
<!--
tue dies oder das
dort wo du die Varaible verwenden würdest
verwendest $ParamerterVonVariable
-->
</xsl:template>
xsl:choose
<xsl:when test="$Variable <= 'x'">
<xsl:call-template name="after_check">
<xsl:with-param name="ParamerterVonVariable" select="'x'" />
</xsl:call-template>
</xsl:when>
xsl:otherwise
<xsl:call-template name="after_check">
<xsl:with-param name="ParamerterVonVariable" select="$Variable" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
Grüße
Thomas
jo so ähnlich hatte ich das bei mir.
<xsl:template match="teste">
<xsl:param name="h" select="150" />
xsl:choose
<xsl:when test="(@d + 1) * $h < 1000">
<xsl:apply-templates select="navigation" mode="after_check">
<xsl:with-param name="var" select="1000" />
</xsl:apply-templates>
</xsl:when>
xsl:otherwise
<xsl:apply-templates select="navigation" mode="after_check">
<xsl:with-param name="var" select="="(@d + 1) * $h" />
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="teste" mode="after_check">
...
</xsl:template>
muss das mit match und mode machen, weil quasi beide templates ja die selben quellxml elemente brauchen.
das erste brauch es für die checks mit @d und das zweite dann für den Code [...]
allerdings bekomm ich damit nun kein output mehr :(
Hallo,
Du hast einen Tippfehler im:
<xsl:with-param name="var" select="="(@d + 1) * $h" />
select="="
---------^^
<xsl:template match="teste" mode="after_check">
...
</xsl:template>
Ja und was steht das drinn? Das wäre entscheidend.
Ist dort <xsl:with-param name="var" /> definiert? Wird es auch verwendet?
Grüße
Thomas
der tippfehler ist mir beim posten unterlaufen. sry und thx dafür :)
@ content im after_check.
der content ist net relevant.
ohne das mode und mit vorgegebenen parametern wird es fehlerfrei aufgerufen.
nur wenn ich den mode aufrufen will geht... nüx...
Hallo,
@ content im after_check.
der content ist net relevant.
Doch.
ohne das mode und mit vorgegebenen parametern wird es fehlerfrei aufgerufen. nur wenn ich den mode aufrufen will geht... nüx...
Eben dehhalb wäre es wichtig zu wissen, was da drinn steht, um zu sehen wie du dort die von dir definiereten Parameter und bzw. Variable verwendest.
Wenn du dein Code nicht posten willst, ist es auch in Ordnung, aber dann kann ich dir leider auch nicht weiterhelfen.
Grüße
Thomas
Sry,
kann den Code gerne posten:
<xsl:template match="teste" mode="after_check">
<xsl:param name="var" />
<!-- Halten wir es ab hier mal ganz einfach und machen nur ein value of -->
<xsl:value-of select="$var" />
</xsl:template>
so ganz grob gesagt ist das das was in dem template drin steht...
sry,
die template bezeichnung im bsp code war falsch.
deckt sich real schon mit der die ich im template vorher mit apply templates aufrufe
Oh Sorry fürs dreifach Posten,
aber ich hab es gerade hinbekommen.
Lösung: ich hab mal anstatt mode das template normal mit
match="element in xml"
aufgerufen.
vorgeschoben hab ich einen match auf "root" (also /).
Resultat war, dass er es nun - warum auch immer - so macht wie ich es gerne hätte.
Vielen Dank für deine Ausdauer und Hilfe ;)
Hi,
aber ich hab es gerade hinbekommen.
Dann passt alles ;-)
Vielen Dank für deine Ausdauer und Hilfe ;)
Ehmm ... ja, gerne ;-)
Grüße
Thomas
Hi,
xsl:choose
<xsl:when test="$Variable <= 'x'">
<xsl:call-template name="after_check">
<xsl:with-param name="ParamerterVonVariable" select="'x'" />
</xsl:call-template>
</xsl:when>
xsl:otherwise
<xsl:call-template name="after_check">
<xsl:with-param name="ParamerterVonVariable" select="$Variable" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
Hm. Spräche was dagegen, das andersrum zu schachteln?
Also
<xsl:call-template name="after_check">
xsl:choose
<xsl:when test="$Variable <= 'x'">
<xsl:with-param name="ParamerterVonVariable" select="'x'" />
</xsl:when>
xsl:otherwise
<xsl:with-param name="ParamerterVonVariable" select="$Variable" />
</xsl:otherwise>
</xsl:choose>
</xsl:call-template>
Oder darf xsl:with-param nur als Kind von call-template benutzt werden?
(w3c ist für mich im Moment nicht erreichbar - server not found - sonst tät ich in der Spec nachgucken...)
cu,
Andreas
Hallo auch,
xsl:choose
<xsl:when test="$Variable <= 'x'">
<xsl:call-template name="after_check">
<xsl:with-param name="ParamerterVonVariable" select="'x'" />
</xsl:call-template>
</xsl:when>
xsl:otherwise
<xsl:call-template name="after_check">
<xsl:with-param name="ParamerterVonVariable" select="$Variable" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>Hm. Spräche was dagegen, das andersrum zu schachteln?
<!-- Category: instruction -->
<xsl:call-template
name = qname>
<!-- Content: xsl:with-param* -->
</xsl:call-template>
Oder darf xsl:with-param nur als Kind von call-template benutzt werden?
Andersrum: call-template darf als Inhalt nur with-param haben.
(with-param kann als Kind auch im apply-templates vorkommen)
(w3c ist für mich im Moment nicht erreichbar - server not found - sonst tät ich in der Spec nachgucken...)
Sa bloß du hast es nicht local bei dir?!? *scnr* ;-)
Grüße
Thomas
Hi,
Andersrum: call-template darf als Inhalt nur with-param haben.
(with-param kann als Kind auch im apply-templates vorkommen)
Ok, dann geht es nicht...
(w3c ist für mich im Moment nicht erreichbar - server not found - sonst tät ich in der Spec nachgucken...)
Sa bloß du hast es nicht local bei dir?!? *scnr* ;-)
Ich bin im Moment nicht local bei mir ;-)
cu,
Andreas