[XSLT] Template innerhalb von for-each aufrufen
-
Hi,
Ich habe hartnäckiges Problem mit eine XML Transformation. Gegeben ist ein Dokument mit einer Reihe von <link> Elementen, sowie ein Template um diese in HTML <a> Elemente zu transformieren. Soweit klappt auch alles.
Nun will ich jedoch in einem speziellen Fall jeden Link mit Hilfe einer for-each Schleife auf einer separaten Zeile ausgeben. Meine bisherige Lösung sieht wie folgt aus:<xsl:for-each select="link"> <a href="{@href}" class="{@class}"> <xsl:apply-templates/> </a> <br/> </xsl:for-each>
Diese Lösung funktioniert zwar, ist jedoch nicht was ich will, denn wie zu sehen ist habe ich den Inhalt meines Link Templates (<a> Block) einfach hinüber kopiert. Ich würde jedoch gerne das Template link aus der Schleife heraus aufrufen. Das Problem dabei ist, dass die for-each Schleife bereits innerhalb des link Elementes ist und ein apply-templates deshalb nur die Attribute und Childs betrifft, nicht jedoch das link Element selbst. Ich habe bereits mit call-template und XPath herumgespielt, finde aber einfach keine funktionierde Lösung.
Danke für die Hilfe
ToyToy
-
Ich glaube das Problem liegt schon in der Definitionsdatei. Du musst dort sagen, dass das link-Element wiederum ein link-Element enthalten kann.
-
Das ist ein Missverständnis, ein link Element enthält keine weiteren link Elemente. Ich mache mal ein konkretes Beispiel, dann ist mein Problem wahrscheinlich besser verständlich:
XML Daten:
<link href="welcome.html">Startseite</link> <link href="disclaimer.html">Disclaimer</link> ...
Das Template, das ich gerne verwenden würde:
<xsl:template match="link"> <a href="{@href}" class="{@class}"> <xsl:apply-templates/> </a> </xsl:template>
Wenn ich jetzt mein Dokument transformieren will:
<xsl:template match="page"> <xsl:for-each select="link"> <!-- würde ich gerne ersetzen durch etwas wie <xsl:call-template name="link"> --> <a href="{@href}" class="{@class}"> <xsl:apply-templates/> </a> <br/> </xsl:for-each> </xsl:template>