Ersatz für das überschreiben von Variablen
Ole
- xsl
0 dedlfix0 Ole0 dedlfix0 Thomas J.S.0 Ole0 Thomas J.S.0 Ole0 Thomas J.S.0 Ole
Guten Morgen,
ich benötige in XSL eine Alternative zum überschreiben von Variablen. Mein aktueller Ansatz sieht so aus:
<xsl:variable name="anchor">#</xsl:variable>
<xsl:for-each select="list/listelement">
<xsl:sort order="ascending" select="hersteller" />
<xsl:choose>
<xsl:when test="starts-with(translate(hersteller, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),$anchor)">
</xsl:when>
<xsl:otherwise>
<xsl:variable name="anchor"><xsl:value-of select="substring(hersteller,1,1)" /></xsl:variable>
<![CDATA[<a href="#]]><xsl:value-of select="$anchor"/><![CDATA[">]]><xsl:value-of select="$anchor"/><![CDATA[</a>]]>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
Ist aus Programmierersicht eigentlich ein logischer Ansatz. Kann natürlich nicht funktionieren, da keine Variablen überschrieben werden können.
Welche Möglichkeit habe ich die gewünschte Funktionalität doch noch zu realisieren?
Danke & Gruß
Ole
echo $begrüßung;
ich benötige in XSL eine Alternative zum überschreiben von Variablen. Mein aktueller Ansatz sieht so aus:
<xsl:variable name="anchor">#</xsl:variable>
Schreib den Code zum Ermitteln des Wertes anstelle des #.
echo "$verabschiedung $name";
Guten Morgen,
Schreib den Code zum Ermitteln des Wertes anstelle des #.
Ich kann dir grad nicht folgen. Stehe ziemlich auf dem Schlauch. Wie meinst du das?
Danke & Gruß
Ole
echo $begrüßung;
» Schreib den Code zum Ermitteln des Wertes anstelle des #.
Ich kann dir grad nicht folgen. Stehe ziemlich auf dem Schlauch. Wie meinst du das?
Zwischen <xsl:variable name="foo"> und </xsl:variable> darf nicht nur ein Wert stehen. Dort können auch andere XSL-Elemente notiert sein. Siehe SELFHTML-Beispiel zu http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#variable@title=xsl:variable.
echo "$verabschiedung $name";
Hallo,
»» Schreib den Code zum Ermitteln des Wertes anstelle des #.
Ich kann dir grad nicht folgen. Stehe ziemlich auf dem Schlauch. Wie meinst du das?
<xsl:for-each select="list/listelement">
<xsl:sort order="ascending" select="hersteller" />
<xsl:variable name="anchor">
xsl:choose
<xsl:when test="starts-with(translate(hersteller, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'#')">
</xsl:when>
xsl:otherwise
<xsl:variable name="anchor"><xsl:value-of select="substring(hersteller,1,1)" /></xsl:variable>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<![CDATA[<a href="#]]><xsl:value-of select="$anchor"/><![CDATA[">]]><xsl:value-of select="$anchor"/><![CDATA[</a>]]>
</xsl:for-each>
Grüße
Thomas
Hallo Thomas,
hier wird ja jedes mal gegen "#" geprüft. Die Variable soll jedoch immer mit dem Wert verglichen werden, der beim vorhergehenden "Durchlauf" in dieser gespeichert wurde.
Ich steh total auf dem Schlauch :(
Danke & Gruß
Ole
Hallo,
hier wird ja jedes mal gegen "#" geprüft. Die Variable soll jedoch immer mit dem Wert verglichen werden, der beim vorhergehenden "Durchlauf" in dieser gespeichert wurde.
Sicher?
Das scheint für mich nicht sehr viel Sinn zu ergeben.
Schreibe einfach ein Template in dem du immer auf den entsprechenden Wert vom preceding-sibling zugreifst (oder fall kein solcher, nimmst du eben '#'). Dann dort wo du die ausgabe haben willst ein apply-templates machen und darin noch die Sortierung angeben.
Falls das immer noch nicht das ist was du möchtest, verstehe ich nicht, was du erreichen willst (mir ist das mit CDATA eh suspekt).
Das "Variable überschreiben" muss ja nicht unbedingt das eigentliche Problem sein.
Grüße
Thomas
Hi Thomas
Falls das immer noch nicht das ist was du möchtest, verstehe ich nicht, was du erreichen willst (mir ist das mit CDATA eh suspekt).
Das "Variable überschreiben" muss ja nicht unbedingt das eigentliche Problem sein.
Das Script dient als Template für ein CMS.
Was ich erreichen möchte ist einen Index zu erstellen aus den Anfangsbuchstaben der Hersteller.
Habe ich z.B. Audi, BMW, Borgwart, Daimler, Volvo und VW möchte ich nachher als Ausgabe "A B D V" stehen haben.
Der Anfangsuchstabe wird jedes mal ausgegeben und in "anchor" gespeichert, wenn er sich von dem "anchor" der "Vorrunde" unterscheidet.
In Pseudocode würde das dann wohl etwa so laufen:
anchor = #
Runde 1
Hersteller = Audi
anchor = a
print anchor
Runde 2
Hersteller = BMW
a != b
anchor = b
print anchor
Runde 3
Hersteller = Borgwart
b == b
Runde 4
Hersteller = Daimler
b != d
anchor = d
print anchor
Runde 5
Hersteller = Volvo
d != v
anchor = v
print anchor
Runde 6
Hersteller = VW
v == v
Ich hoffe das ist etwas verständlicher :)
Gruß
Ole
Hallo,
»» Falls das immer noch nicht das ist was du möchtest, verstehe ich nicht, was du erreichen willst (mir ist das mit CDATA eh suspekt).
»» Das "Variable überschreiben" muss ja nicht unbedingt das eigentliche Problem sein.Das Script dient als Template für ein CMS.
Was ich erreichen möchte ist einen Index zu erstellen aus den Anfangsbuchstaben der Hersteller.
Habe ich z.B. Audi, BMW, Borgwart, Daimler, Volvo und VW möchte ich nachher als Ausgabe "A B D V" stehen haben.
Der Anfangsuchstabe wird jedes mal ausgegeben und in "anchor" gespeichert, wenn er sich von dem "anchor" der "Vorrunde" unterscheidet.
Ich hoffe das ist etwas verständlicher :)
Ja, es ist nun verstädlich. Und wie ich denke, der falscher Ansatz. (Was soll passieren, wenn die "anchor" »A B C A B C« ergibt? Da unterscheidet sich der nächste vom vorigen ja immer, aber es sind dennoch Wiederholungen)
Hier würde sich doch eine Gruppierung anbieten.
Einen ansatz findest du dazu unter:
http://forum.de.selfhtml.org/archiv/2007/6/t154345/#m1005471
Grüße
Thomas
Hallo Thomas,
Ja, es ist nun verstädlich. Und wie ich denke, der falscher Ansatz. (Was soll passieren, wenn die "anchor" »A B C A B C« ergibt? Da unterscheidet sich der nächste vom vorigen ja immer, aber es sind dennoch Wiederholungen)
Da ich ja vorher mit
<xsl:sort order="ascending" select="hersteller" />
sortiere wird der skizierte Fall nicht eintreten. Zumindest haben alle meine Versuche mit einer unsortierten Liste diese immer korrekt sortiert ausgegeben.
Hier würde sich doch eine Gruppierung anbieten.
Einen ansatz findest du dazu unter:
http://forum.de.selfhtml.org/archiv/2007/6/t154345/#m1005471
Das sieht interessant aus. Sobald ich verstanden habe wie es funktioniert, werd ich es mal ausprobieren.
Danke & Gruß
Ole