XSL/ XSLT WorkshopIm ersten Teil des XSL/ XSLT Workshops haben sie einige grundlegende Funktionen von XSL kennen gelernt. Im zweiten Teil des Workshops behandeln wir das Thema "bedingte" Ausgaben in XSL.Im ersten Teil des XSL/ XSLT Workshops haben Sie die ersten XSL Befehle kennen gelernt, und auch schon die ersten Templates mit dem for-each Befehl erstellt.
Im zweiten Teil des Kurses geht es vor allem um die bedingte Ausgabe von XML Daten über XSL.

autor.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="autor.xsl"?>
<autoren>
<autor>
<name>Thiemo Fetzer</name>
<nic>tf</nic>
<email>redaktion@devmag.net</email>
</autor>
<autor>
<name>Heinz Mustermann</name>
<nic>hm</nic>
<email>hm@devmag.net</email>
</autor>
</autoren>


Die XML Datenbank, wie im ersten Teil des XSL/ XSLT Workshops.

autor.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Autor.xsl</title>
</head>
<body>
<table border="1">
<tr>
<td width="34%">Name</td>
<td width="6%">Nic</td>
<td width="60%">Email</td>
</tr>
<xsl:for-each select="autoren/autor">
<xsl:if test="name='Thiemo Fetzer'">
<tr>
<td width="34%"><xsl:value-of select="name" /></td>
<td width="6%"><xsl:value-of select="nic" /></td>
<td width="60%"><xsl:value-of select="email" /></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


Der Schlüssel liegt in dem Befehl <xsl:if test="">. Mit diesem wird die Bedingung definiert. Die Syntax sieht grundlegend so aus:

<xsl:if test="Bedingung">
<!-- Bedingte Ausgabe -->
</xsl:if>


Der Code zwischen dem öffnenden, und schließenden Tag wird nur bearbeitet, wenn die Bedingung "test" erfüllt ist, also wenn das Ergebnis "wahr", oder "true" ist.
Wichtig bei der Anweisung ist, das jedes Element <autor> auf diese Bedingung überprüft werden muss. Deshalb wird die Bedingung in eine for-each Schleife eingebaut. Dadurch wird jedes Element Autor, mit den entsprechenden Unterelementen auf die Bedingung überprüft.

Mehrere Bedingungen definieren

Die XSL Anweisung "if" definiert nur eine Bedingung. Man kann natürlich mehrere Bedingungen auch ineinander verschachteln, und dadurch ein Ergebnis sehr genau hinausfiltern.

Mit <xsl:choose> können Sie mehrere Bedingungen nebeneinander definieren, und auch eine Default Ausgabe festlegen. Diese wird ausgegeben, wenn der Datensatz auf keine der vorhandenen Bedingungen passt.

<xsl:choose>
<xsl:when test="Bedingung">
<!-- mögliche Ausgabe -->
</xsl:when>
<xsl:otherwise>
<!-- Wenn die erste Bedingung nicht zutrifft -->
</xsl:otherwise>
</xsl:choose>


In diesem Beispiel verwenden wir wiederum die XML Datenbank aus dem ersten Beispiel. Lediglich das XSL Template wird wiederum angepasst.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Autor.xsl</title>
</head>
<body>
<table border="1">
<tr>
<td width="34%">Name</td>
<td width="6%">Nic</td>
<td width="60%">Email</td>
</tr>
<xsl:for-each select="autoren/autor">
<xsl:choose>
<xsl:when test="name='Thiemo Fetzer'">
<tr>
<td width="34%" bgcolor="red"><xsl:value-of select="name" /></td>
<td width="6%"><xsl:value-of select="nic" /></td>
<td width="60%"><xsl:value-of select="email" /></td>
</tr>
</xsl:when>
<xsl:when test="name='Heinz Mustermann'">
<tr>
<td width="34%" bgcolor="yellow"><xsl:value-of select="name" /></td>
<td width="6%"><xsl:value-of select="nic" /></td>
<td width="60%"><xsl:value-of select="email" /></td>
</tr>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="name"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


Zunächst wird wiederum eine normale for-each Schleife geöffnet, <xsl:for-each select="autoren/autor">. Darauf wird direkt der choose Befehl für die Auswahl geöffnet. Darauf werden insgesamt zwei Bedingungen definiert. Die erste Bedingung überprüft, ob der Name <xsl:when test="name='Thiemo Fetzer'"> in diesem Datensatz "Thiemo Fetzer" ist. Ist dies der Fall wird der Code dazwischen ausgegeben, und die Hintergrundsfarbe auf Rot gesetzt.
Der Namen "Heinz Mustermann" trifft hier nicht zu, jedoch auf die nächste Bedingung. Hierbei geschieht das gleiche nochmals, nur das der Hintergrund der Ausgabe auf Gelb gesetzt wurde.
Der <xsl:otherwise> Teil würde den Namen des Autors aus der Datenbank ausgeben, bei dem diese beiden Bedingungen nicht erfüllt sind.

Bedingte XSL Ausgabe
Bedingte XSL Ausgabe

Im zweiten Teil des XSL Workshops haben Sie also zwei Möglichkeiten kennen gelernt, mit denen Sie XML Daten bedingt und formatiert ausgeben können.
Im dritten Teil des XSL Workshops beschäftigen wir uns vor allem mit der sortierten Ausgabe von XML Daten über XSL.

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Weiterführende Links: