« XSL-Start

Template Rules II

Lernziel

Sie lernen Template Rules kennen und können Templates für bestimmte Elemente definieren.

Handlungsanweisungen

Aufgaben:
  1. Was ist zur vorherigen Variante anders?
  2. Ausgabe (Verpackung) der gefunden Daten in ein HTML-Gerüst und damit eine Anzeigemöglichkeit für den Browser

Die Verpackung als HTML-Tabelle

Die Ausgabe soll auch im Browser korrekt dargestellt werden, deshalb wird in jeder Regel das passende »Verpackungsmaterial« um die gefundenen Daten gelegt und wir erhalten eine korrekt formatierte HTML-Tabelle:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

     <xsl:output method="xml" indent="yes"/>

     <xsl:template match="/">

     <html>
     <head>
     <title>Adressen von XML zu HTML</title>
     </head>
     <body>
        <xsl:apply-templates/>
     </body>
     <html>

   </xsl:template>

     <xsl:template match="name">
        <tr>
         <xsl:apply-templates/>
        </tr>
     </xsl:template>

     <xsl:template match="vorname">
     <td>
       <xsl:value-of select="."/>
     </td>

     </xsl:template>

     <xsl:template match="nachname">
     <td>
        <xsl:value-of select="."/>
     </td>
     </xsl:template>

     <!-- Überschreiben der Standard-Regel und
          Unterdrückung der Ausgabe: siehe nächster Kommentar
     -->

     <xsl:template match="text()|@*">
               <!--xsl:value-of select="."/-->
     </xsl:template>
</xsl:stylesheet>

Wie an den Hervorhebungen zu erkennen ist, wurde für das Wurzellement, das HTML-Gerüst eingefügt und dort wo der Inhalt der Website erscheinen soll, die nächsten Template-Rules aufgerufen.

Zusätzlich wurde für das Elemente »name« eine Regel erstellt, um eine Tabellenzeile erzeugen zu könnne. das HTML-Element »tr« bildet wie das XML-Element »name« eine Klammer oder ist ein Container für die Elemente »vorname« und »nachname«.

Beispiel einer Transformation (die Dateinamen sind anzupassen):

java -jar ./saxon9he.jar adressen.xml adressen-to-html.xsl

Ergebnis der Transformation

<?xml version="1.0" encoding="UTF-8"?>
<html>
   <head>
      <title>Adressen von XML zu HTML</title>
   </head>
   <body>
      <tr>
         <td>Becker</td>
         <td>Heinz</td>
      </tr>
      <tr>
         <td>Rennt</td>
         <td>Lola</td>
      </tr>
   </body>
</html>