XSL/ XSLT Workshop Teil 2

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.

This entry was posted in XML. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *