XML | XML-Schema | XPath | XSL-T | XSL-FO | XQuery | XProc | SVG |
XSL-T / XSLT-Tipps / XSLT-Konvertierung von XML nach HTML / Arbeiten mit xsl:template name/xsl:call-template
![]() |
![]() |
➪ Ein nochmals anderer Ansatz basiert auf der kompletten oder teilweisen Auslagerung der Implementierungslogik in benannte Templates (xsl:template name), die über xsl:call-template aufgerufen werden.
Diese Subroutinen werden direkt benannt und mit Parameterübergaben aufgerufen (obwohl allein schon der Aufruf von xsl:template name="Tabellenzeile" zeigt, dass ein Parameteraufruf nicht erforderlich ist, wenn hinter dem Einzelaufruf des Templates ein konkreter Node steht, der anderswo zugewiesen wird).
<xsl:template match="/">
<html>
<head>
<title></title>
</head>
<body>
<table border="1" width="100%">
<thead>
<tr>
<th>Nr</th>
<th>Nachname</th>
<th>Vorname</th>
<th>Wohnort</th>
<th>Einkommen</th>
<th>Ausgaben</th>
<th>Flensburger Punkte</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="Orte/Ort/Mensch">
<xsl:sort select="Gehalt"
data-type="number"
order="descending" />
<xsl:call-template name="Tabellenzeile" />
</xsl:for-each>
</tbody>
</table>
</body>
</html>
</xsl:template>
<xsl:call-template name="Tabellenzeile"/> ruft das folgende Template auf, das direkten Bezug auf den XML-Input nimmt und damit ein weiteres benanntes XSL-Template aufruft.
<xsl:template name="Tabellenzeile">
<tr>
<xsl:if test="position() mod 2 = 0">
<xsl:attribute name="bgcolor">lightgrey</xsl:attribute>
</xsl:if>
<td>
<xsl:value-of select="position()" />
</td>
<xsl:call-template name="Einzelspalte">
<xsl:with-param name="p" select="vorname" />
</xsl:call-template>
<xsl:call-template name="Einzelspalte">
<xsl:with-param name="p" select="name" />
</xsl:call-template>
<xsl:call-template name="Einzelspalte">
<xsl:with-param name="p" select="../name" />
</xsl:call-template>
<xsl:call-template name="Einzelspalte">
<xsl:with-param name="p" select="Gehalt" />
</xsl:call-template>
<xsl:call-template name="Ausgaben" />
<td align="center">
<xsl:call-template name="listimport">
<xsl:with-param name="plistnr">1</xsl:with-param>
<xsl:with-param name="pkey">
<xsl:value-of select="id" />
</xsl:with-param>
</xsl:call-template>
</td>
</tr>
</xsl:template>
Im Unterschied zu dem vorherigen Template Tabellenzeile, das direkten Bezug auf den XML-Input nimmt, erhält das folgende Template sämtliche Informationen über einen Parameter.
<xsl:template name="Einzelspalte">
<xsl:param name="p" />
<td>
<xsl:choose>
<xsl:when test="$p castable as xs:decimal">
<xsl:attribute name="align">right</xsl:attribute>
<xsl:value-of
select="format-number($p, '#.###,00 €', 'euro')" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$p" />
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:template>
wg / 26. Oktober 2020
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de