rekusiver aufruf eines templatesohne mehrfachausführung?
sandra
- xsl
0 Thomas J.S.0 Sandra
hallo leute.
ich habe eine kleine xsl-frage.
ich versuche testweise, ein template reskuriv aufzurufen, damit parameter übergeben werden können. in diesem fall soll der parameter PositionX entsprechend übergeben werden.
Jetzt wird dummerweise jeder aufruf templates doppelt ausgeführt. eigentlich ja logisch, ich habe aber keine idee, wie ich das verhindern kann.
hier der aufruf des templates:
<xsl:template match="Verkauf">
<xsl:call-template name="TabVerkauf">
<xsl:with-param name="PositionX" select="400"/>
</xsl:call-template>
</xsl:template>
und hier das template selbst:
<xsl:template name="TabVerkauf">
<xsl:param name="PositionX"/>
<xsl:param name="mitZaehler" select="1"/>
An Position:
<xsl:value-of select="$PositionX" /> mit dem Betrag:
<xsl:value-of select="Betrag" /><br />
<xsl:if test="$mitZaehler < $anzahlVerkaeufe">
<xsl:call-template name="TabVerkauf">
<xsl:with-param name="PositionX" select="666"/>
<xsl:with-param name="mitZaehler" select="mitZaehler+1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
würde mich sehr freuen, wenn mir jemand weiterhelfen könnte!
Lieber Gruß
sandra
Hallo,
Jetzt wird dummerweise jeder aufruf templates doppelt ausgeführt.
Was heisst das?
eigentlich ja logisch,
diese Logik würde mich interessieren.
ich habe aber keine idee, wie ich das verhindern kann.
hier der aufruf des templates:
<xsl:template match="Verkauf">
<xsl:call-template name="TabVerkauf">
<xsl:with-param name="PositionX" select="400"/>
</xsl:call-template>
</xsl:template>und hier das template selbst:
<xsl:template name="TabVerkauf">
<xsl:param name="PositionX"/>
<xsl:param name="mitZaehler" select="1"/>
An Position:
<xsl:value-of select="$PositionX" /> mit dem Betrag:
<xsl:value-of select="Betrag" /><br />
<xsl:if test="$mitZaehler < $anzahlVerkaeufe">
<xsl:call-template name="TabVerkauf">
<xsl:with-param name="PositionX" select="666"/>
<xsl:with-param name="mitZaehler" select="mitZaehler+1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
Aufglöst würe das etwas so aussehen:
<xsl:template match="Verkauf">
An Position:400 mit dem Betrag:'Betrag'<br />
</xsl:template>
<xsl:if test="$mitZaehler < $anzahlVerkaeufe">
^^^^^^^^^^^^^^^^^^^^
Ist zumindest in deinen templates nicht definiert.
wie siehr denn dein xml aus?
Grüße
Thoma
Hallo Thomas.
Der Teil hat sich mittleweile erledigt. Ich hatte da einigen Quatsch fabriziert.
Woran ich immer noch hänge, ist das Problem, dass meine svg Ausgabe ein mal korrekterweise in die svg geschrieben wird, aber ein zweites mal direkt in die Html.
Die svg-Ausgabe ist folgende Zeile:
<svg:text x="395" y="{$Position}" style="stroke:black;stroke-width:1"><xsl:value-of select="$Artikel" /></svg:text>
Ich nutze das Inline-svg wie hier beschrieben: http://www.surguy.net/articles/client-side-svg.xml
Kann mir irgendjemand bei dem Problem helfen?
Lieber Gruß
Sandra
Halo,
Woran ich immer noch hänge, ist das Problem, dass meine svg Ausgabe ein mal korrekterweise in die svg geschrieben wird, aber ein zweites mal direkt in die Html.
Dann erzeige doch für jede svg ein Template das du dan an der entsprechenden stelle aufrufst (bzw ein named Tempalte, dass du dann per paramter aufruft.
Grüße
Thomas