Home
Über mich
Veröffentlichungen

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

Arbeiten mit xsl:template name/xsl:call-template

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 &#8364;', '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.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XSL_XML2HTML4.html