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 ein Tag-Elemente generell keine zwei Attribute mit dem gleichen Namen 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.