Formatierungen in der XML-Datei
Nachdem wir nun ein Grundgerüst der Seite haben, kann es nun auch wünschenswert sein, in der XML-Datei Formatierungen einzufügen. Hierzu können auch wieder selbst definierte Tags verwendet werden, zum Beispiel um Links oder Schriftformatierungen einzuführen. Hierzu wird nun nach der Struktur der XML-Datei gegangen, die wie eine Baumstruktur abgearbeitet (depth-recursive). Hierbei stellt der Text die Blätter des Baumes dar, welche extra dargestellt werden. Wir versuchen es an einem Beispiel (alle Daten sind rein fiktiv, die Bücher gibt es natürlich nicht wirklich). Zuerst folgende XML-Datei:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="/beispiel.xsl" type="text/xsl" ?>
<Buecher>
<Buch>
<Name>
Mein erstes Buch</Name>
<Autor>
Jochen Mueller</Autor>
<Hinweis>
Das Buch ist<fett>
sehr</fett>
empfehlenswert!</Hinweis>
</Buch>
<Buch>
<Name>
XML-Buch</Name>
<Autor>
Andreas Schmidt</Autor>
<Hinweis>
Mehr Informationen<link href="http://www.selfxml.de">
hier</link>
.</Hinweis>
</Buch>
</Buecher>
Wenn wir uns diese Datei näher anschauen, erkennen wir, dass hierbei auch Tags wie
<fett>
verwendet werden, die Angaben über die Formatierung machen. Diese können wir nun nicht mehr wie bisher mit dem value-of Tag auslesen, sondern müssen einen Baum abarbeiten. Für diesen Verlauf verwenden wir das
<xsl:apply-templates/>
Tag. Dieses gibt dem Browser die Anweisung, dass er von dieser Stelle aus, die unteren Tags abarbeiten soll. Hierbei gilt: Text wird in diesem Baum ebenfalls als eigenes Element mit dem Namen text() ausgegeben. Dies führt uns zu folgender XSL-Datei, deren Erläuterung dann folgt:
<xsl:stylesheet xmlns:xsl=http://www.w3.org/TR/WD-xsl>
<xsl:template match="/">
<HTML>
<Head>
<Title>
Eine Buecherseite</Title>
</Head>
<Body>
<H3>
eine Uebersicht</H3>
<xsl:apply-templates/>
</Body>
</HTML>
</xsl:template>
<xsl:template match="Buecher">
<table border="2">
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="Buch">
<tr>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="Name">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
<xsl:template match="Autor">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
<xsl:template match="Hinweis">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
<xsl:template match="fett">
<b>
<xsl:apply-templates/>
</b>
</xsl:template>
<xsl:template match="link">
<a>
<xsl:attribute name="href">
<xsl:value-of select="@href"/>
</xsl:attribute>
<xsl:apply-templates/>
</a>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
Dies sieht auf den ersten Blick sehr verwirrend aus, ist aber an sich relativ einfach zu verstehen. Wir gehen gleich nach der Überschrift in die Abarbeitung des Baumes. Dies entspricht dem Tag
<Buecher>
, also dem Wurzelelement. Nun wird nach Informationen gesucht, wie dieses Tag dargestellt werden soll, und wir werden fündig bei dem Tag
<xsl:template match="Buecher">
. Diese Tag sagt aus, dass hier eine Vorlage zur Darstellung dieses Tags gefunden werden kann. In unserem Fall wird eine Tabelle (<table>
) aufgerufen. Dann treffen wir wieder auf das uns schon bekannte
<xsl:apply-templates/>
. Dies bedeutet, dass von dieser Stelle aus der Baum weiter nach unten abgearbeitet werden soll. Alles was aus dieser Abarbeitung resultiert, wird zwischen <table>
und </table>
dargestellt. Nach diesem Prinzip wird nun der Baum immer weiter abgebaut. Als nächstes sucht er nach dem Tag Buch, und findet hierzu die Informationen, dass er eine neue Zeile einfügen soll. Folglich wird bei Name ein Datenfeld eingeführt. Nach dem öffnenden<Name>
-Tag folgt nicht ein weiteres Tag, sondern normaler Text. Dafür wird nun die Vorlage
<xsl:template="text()">
aufgerufen, in dieser steht nur, dass einfach der Text ausgegeben werden soll. Nun wird also der Text in das Datenfeld eingefügt. und im Baum wird mit dem nächsten Tag. dem Autoren weitergemacht. Das Beispiel sollte folgendes Ergebnis zeigen:
Wenn Ihr Browser XML und XSL versteht, sollte das Ergebnis auch direkt anzeigbar sein :