Newbie: Template-Ergebnis in Link einfügen?

klaeuschen41

Mitglied
Hallo zusammen,

ich bin noch ziemlich neu beim XSLT-programmieren und wahrscheinlich gibt es eine einfache Lösung für mein Problem.

Ich möchte die Plus-Zeichen, die in Parametern für eine URL vorkommen, durch die entsprechende character entity ersetzen und das jeweilige Ergebnis in einen Link verpacken.

Das Ersetzen der Pluszeichen funktioniert mit dem folgenden Aufruf des unten stehenden Templates.

Code:
<xsl:variable name="parameter1" select="param1"/>
<xsl:call-template name="replace">
	<xsl:with-param name="string" select="$parameter1"/>
	<xsl:with-param name="pattern" select="'+'"/>
	<xsl:with-param name="replacement" select="'charEntityForPlus'"/> <!-- hier "charEntityForPlus", weil die richtige character entity hier sonst als '+' dargestellt wird. -->
</xsl:call-template>

Allerdings will es mir nicht gelingen, das Ergebnis des Template-Aufrufes in den Link einzufügen. Wie schaffe ich es das Ergebnis des Template-Aufrufes an der Stelle von {param1} im folgenden Link einzufügen?

Code:
<a href="http:www.foo.de/?param1={param1}"><xsl:value-of select="title"/></a>

Für jede Hilfe wäre ich sehr dankbar!

Gruß,
Klaus


Hier noch der Vollständigkeit halber das replace-Template:

Code:
	<xsl:template name="replace">
	 	<xsl:param name="string" select="''"/>
		<xsl:param name="pattern" select="''"/>
		<xsl:param name="replacement" select="''"/>
		<xsl:choose>
			<xsl:when test="$pattern != '' and $string != '' and contains($string, $pattern)">
				<xsl:value-of select="substring-before($string, $pattern)"/>
				<!--
				Use "xsl:copy-of" instead of "xsl:value-of" so that users
				may substitute nodes as well as strings for $replacement.
				-->
				<xsl:copy-of select="$replacement"/>
				<xsl:call-template name="replace">
					<xsl:with-param name="string" select="substring-after($string, $pattern)"/>
					<xsl:with-param name="pattern" select="$pattern"/>
					<xsl:with-param name="replacement" select="$replacement"/>
				</xsl:call-template>
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="$string"/>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
 
Hallo nochmal,

kann wirklich keiner helfen? :-(

Vielleicht habe ich mich auch einfach schlecht ausgedrückt, weil ich eigentlich denke, dass dieses Problem häufiger auftreten müsste und bestimmt jemand weiß, wie das geht ...

Also, ich versuche es noch einmal knapper (besser?) zu formulieren:

Ich möchte eigentlich nur das Ergebnis eines Funktionsaufrufes in einen Link einfügen. Oder geht das schlicht nicht?

Viiielen Dank für Hilfe und schöne Grüße,
Klaus
 
Hallo,

so müsste es eigentlich funktionieren
XML:
<a>
<xsl:attribute name="href">
	<xsl:text>http:www.foo.de/?param1=<xsl:call-template name="replace">
	<xsl:with-param name="string" select="$parameter1"/>
	<xsl:with-param name="pattern" select="'+'"/>
	<xsl:with-param name="replacement" select="'charEntityForPlus'"/> 
</xsl:call-template>></xsl:text>
</xsl:attribute>
</a>

Ich hab es jetzt nicht probiert, aber so müsste es funktionieren.

MFG

zEriX
 
Zuletzt bearbeitet von einem Moderator:
Hallo zEriX!

Vielen Dank! So ähnlich hat es tatsächlich funktioniert (s.u.). Das Attribut-Tag war der entscheidende Hinweis!

Es hat sich jetzt jedoch noch ein weiteres Problem ergeben - vielleicht hast du dafür ja auch noch eine Idee... (?)

Und zwar sollen alle Nicht-ASCII-Zeichen in $parameter1 (s.u.) durch "hexadezimale Zeichen" (? heißen die so? --> ich meine z.B. %2b' für '+') ersetzt werden, damit damit der Wert von $parameter1 auch als Name für HTML-Dateien verwendet werden kann, weil die Browser ja immer automatisch Sonderzeichen umformen. Neben den deutschen Umlauten können das theoretisch auch französische, skandinavische etc. Zeichen sein (ich denke die europäischen reichen da aus ...). Gibt es dafür irgendein sinnvolles Vorgehen?
Jedes Zeichen einzeln zu ersetzen erscheint mir irgendwie umständlich, zumal man ja auch leicht eins vergessen kann. Gibt es irgendeine Liste, die man als Grundlage nehmen kann, wenn man tatsächlich jedes Zeichen einzeln ersetzen muss?

(Ich hoffe, ich habe mich verständlich ausgedrückt!)

Viele Grüße,
Klaus

p.s. Hier noch die Lösung für das 1. Problem:
Code:
<a>
<xsl:attribute name="href">    
	<xsl:text>http:www.foo.de/?param1=</xsl:text>
	<xsl:call-template name="replace">    
		<xsl:with-param name="string" select="$parameter1"/>    
		<xsl:with-param name="pattern" select="'+'"/>    
		<xsl:with-param name="replacement" select="'%2b'"/> 
	</xsl:call-template>
</xsl:attribute>
<xsl:value-of  select="title" />
</a>
 
Zuletzt bearbeitet:
Zurück