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.
|