Templates Tausch ?
XSLAnwender
- xsl
0 ThomasM
Hallo !
Ist es möglich, Templates während des Ablaufs auszutauschen ?
z.B. um 2 verschiedene Styles auf einen Knoten einsetzen zu können.
Beispiel
XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- edited with XMLSpy v2008 sp1 (http://www.altova.com) by Juergen (none) -->
<BUCHVERWALTUNG>
<BUECHER>
</BUECHER>
<GENRES>
<GENRE GENRETyp="ROMAN">
<ID>1</ID>
<TITEL>Fantasy</TITEL>
<AUTOR freischaffen="JA">Herbert</AUTOR>
</GENRE>
<GENRE GENRETyp="ROMAN">
<ID>2</ID>
<TITEL>Krimi</TITEL>
<AUTOR freischaffen="Nein">Klaus</AUTOR>
</GENRE>
...
</GENRES>
</BUCHVERWALTUNG>
XSL: (Auflistung)
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Das ist ein Genre-Example</title>
</head>
<body>
<xsl:apply-templates select="*"/>
</body>
</html>
</xsl:template>
<xsl:template match="GENRES">
<xsl:for-each select="GENRE">
<xsl:value-of select="ID"/> -
<b><xsl:value-of select="AUTOR"/></b><br/> <=========
</xsl:for-each>
</xsl:template>
</xsl:transform>
--------------------------------------------
Nun das Ziel: Das Template "GENRES" soll "AUTOR" einmal fett <b> drucken,
und das andere mal nicht. Also
<xsl:template match="GENRES">
<xsl:for-each select="GENRE">
<xsl:value-of select="ID"/> -
<xsl:value-of select="AUTOR"/><br/> <=========
</xsl:for-each>
</xsl:template>
--------------------------------------------
Nun das Problem:
Ein Template darf nur einmal vorkommen.
Wie kann man das lösen ?
Die gezielte Einbindung über xsl:import bzw. xsl:include
scheint hier keine Lösung zu bieten.
Hallo XSLAnwender,
Nun das Problem:
Ein Template darf nur einmal vorkommen.Wie kann man das lösen ?
Gib beiden Templates ein mode-Attribut mit und rufe xsl:apply-templates mit dem jeweils gewünschten mode auf:
<xsl:template match="GENRES" mode="normal">
<!-- ... -->
</xsl:template>
<xsl:template match="GENRES" mode="spezial">
<!-- ... -->
</xsl:template>
und
<xsl:apply-templates mode="normal"/>
bzw.
<xsl:apply-templates mode="spezial"/>
Grüße,
Thomas