Home Aufbau einer XSL-Datei
Aufbau einer XSL-Datei Drucken E-Mail

Deklarationskopf

    Wie bei der XML-Datei muss man die XSL-Datei auch zuerst als solche kennzeichnen (das Tag muss am Ende auch wieder geschlossen werden).
    Dies funktioniert mit:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

Grundsätzliches

    Der Aufbau einer XSL-Datei besteht aus 2 Teilen. Der erste Teil befindet sich normalerweise in dem Aufruf des Root-Elementes. Dort wird erstmal der Grundaufbau der Seite in HTML definiert, also z.B. die Tags <Head> und <Body> (s.hierzu Selfhtml). In diesen Seitenaufbau kann man verschiedene Werte aus der XML-Datei einbinden, wie der Seitentitel usw. Der andere Teil ist der Schwierigere, aber auch der Interessantere der beiden. Hier kann man mit verschiedenen Anweisungen die von der XML-Datei abhängig gemacht werden, die Seite formatieren. Hier gibt es zum Beispiel Schleifen und Vergleiche. Während der erste Teil linear abgearbeitet wird, kommt es im zweiten Teil zu Sprüngen.

Root-Element der XSL-Datei

    Die XSL-Datei sollte mit <xsl:template match="/"> beginnen. Diese Anweisung enthält die Angaben, was der Browser machen soll, wenn das Element / aufgerufen wird. Das spezielle Zeichen "/" bezeichnet hier das Root-Element der XML-Datei, das auf jeden Fall aufgerufen wird. Dort beschreibt man dann erstmal den Aufbau der Seite. Ein Beispiel:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

      <xsl:template match="/">
        <HTML>
         <Head>
          <Title>Selfxml-Testseite</Title>
         </Head>
         <Body>
          <H1>Ein Test</H1>
         </Body>
        </HTML>
      </xsl:template>

    </xsl:stylesheet>

Einbau von XML-Daten

    Um nun den Vorteil von XML zu nutzen, will man ja auch diese Daten einbauen. Dies funktioniert mit der Anweisung <xsl:value-of select="Element">. Das select-Attribut muss den genauen "Weg" durch die einzelnen Tags von dem aufrufenden Element (im Moment das Root-Element) zu dem gewünschten Element beschreiben. Dies sieht man am besten an einem Beispiel.
    Die folgenden XSL-Beispiele beziehen sich auf nachstehende XML-Datei:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet href="/test.xsl" type="text/xsl" ?>

     <Mitglieder>

       <Verein>Demo-Verein</Verein>

       <Mitglied Id="1">
         <Vorname> Thomas </Vorname>
         <Nachname> Maier </Nachname>
         <Strasse> Hauptstrasse 12 </Strasse>
         <PLZ> 12345 </PLZ>
         <Stadt> Stuttgart </Stadt>
       </Mitglied>

       <Mitglied Id="2">
         <Vorname> Michael </Vorname>
         <Nachname> Schneider </Nachname>
         <Strasse> Bahnhofsstrasse 21 </Strasse>
         <PLZ> 54321 </PLZ>
         <Stadt> Stuttgart </Stadt>
       </Mitglied>

     </Mitglieder>
    Nun wird aus der XML-Datei der Name des Vereins ausgelesen, und als Seitentitel ausgegeben:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

      <xsl:template match="/">
        <HTML>
         <Head>
          <Title><xsl:value-of select="Mitglieder/Verein"/></Title>
         </Head>
         <Body>
          <H1>Ein Test</H1>
         </Body>
        </HTML>
      </xsl:template>

    </xsl:stylesheet>
    Nun wollen wir eine Tabelle mit den verschieden Mitgliedern erstellen, die nicht von der Anzahl der Mitglieder abhängig ist. Dies werden wir mit einer Art Schleife erledigen. Diese wird mit <xsl:for-each select="Mitglieder/Mitglied"> initialisiert. In unserem Beispiel wird nun für jedes Element Mitglied in der XML-Datei nun in der Tabelle mit <tr> eine neue Zeile mit zwei Spalten mit Nach- und Vorname ausgegeben.
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

      <xsl:template match="/">
        <HTML>
         <Head>
          <Title><xsl:value-of select="Mitglieder/Verein"/></Title>
         </Head>
         <Body>
          <H1>Ein Test</H1>
           <table border="1">
            <xsl:for-each select="Mitglieder/Mitglied">
             <tr>
              <td> <xsl:value-of select="Nachname"/> </td>
              <td> <xsl:value-of select="Vorname"/> </td>
             </tr>
            </xsl:for-each>
           </table>
         </Body>
        </HTML>
      </xsl:template>

    </xsl:stylesheet>
    Hiermit kann man nun schon anfangen ein wenig zu spielen, ein Beispiel ist eine Sortierung der Ausgabe nach dem Nachname. Hierzu verwenden wir die von <xsl:for-each> angebotene Sortierfunktion. Dies funktioniert mit Angabe eines sort-Attributes. Hinweis: Da jedes Tag nicht zwei Attribute gleichen Namens haben darf, gibt man eine zweite Sortierung durch ein Semikolon getrennt an.
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

      <xsl:template match="/">
        <HTML>
         <Head>
          <Title><xsl:value-of select="Mitglieder/Verein"/></Title>
         </Head>
         <Body>
          <H1>Ein Test</H1>
           <table border="1">
            <xsl:for-each select="Mitglieder/Mitglied" order-by="Nachname;Vorname">
             <tr>
              <td> <xsl:value-of select="Nachname"/> </td>
              <td> <xsl:value-of select="Vorname"/> </td>
             </tr>
            </xsl:for-each>
           </table>
         </Body>
        </HTML>
      </xsl:template>

    </xsl:stylesheet>
    Nun werden die Daten zuerst nach Nachnamen, bei gleichem Nachnamen nach dem Vornamen sortiert. Wir bekommen mit diesem Beispiel einen ersten Eindruck von den Möglichkeiten von XSL.