Bedingungen
In XSLT gibt es, wie in anderen Programmiersprachen auch, die Möglichkeit, Bedingungen aufzustellen, um somit eine sogenannte
Fallunterscheidung durchzuführen. Bei der Fallunterscheidung (auch als Abfrage bezeichnet) wird mit Hilfe einer Bedingung
(z. B. einem Vergleich) geprüft, ob ein bestimmter Fall (also die Bedingung) zutrifft. Trifft die Bedingung zu, so kann ein
bestimmter Programmteil (also ein Code) ausgeführt werden. Trifft die Bedingung nicht zu, so wird der Programmteil nicht
ausgeführt. Um eine Bedingung aufzustellen, benötigen wir bestimmte Operatoren. Hier kommen die logischen Operatoren
von XPath ins Spiel: and
(und) und or
(oder). Mit diesen Operatoren ist es möglich, komplexere
Bedingungen bestehend aus mehreren Teilbedingungen aufzustellen. Zudem werden sogenannte Vergleichsoperatoren
eingesetzt, um einen Vergleich durchführen zu können: =
(gleich), !=
(ungleich), <
(kleiner als), <=
(kleiner-gleich), >
(größer als) und >=
(größer-gleich).
Innerhalb einer Bedingung können auch Variablen, Pfade im XPath-Syntax sowie XPath-Funktionen verwendet werden.
Wichtig: Die Zeichen <
und >
dürfen in XSLT nicht direkt verwendet werden und müssen
maskiert werden: <
für <
und >
für >
.
Einfache Verzweigung
Eine Wenn-Bedingung kann mit Hilfe des XSLT-Elements if
aufgestellt werden. Man spricht hier auch von einer
einfachen Verzweigung, d. h. der Ablauf des Programms / Skripts verzweigt sich. Der Programmteil, der innerhalb dieser
Verzweigung notiert wird, wird daher nur dann ausgeführt, wenn die angegebene Bedingung zutrifft. Die Bedingung für
die einfache Verzweigung wird innerhalb des test
-Attributs angegeben. Im folgenden Beispiel wird das Attribut
privat
des Wurzelelements auf Übereinstimmung mit dem Wert 'ja'
(einfache Anführungszeichen werden
benötigt, da es sich bei dem Wert um eine Zeichenkette handelt) geprüft.
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml-stylesheet href="einfache-verzweigung.xsl" type="text/xsl" ?> <kontakt privat="ja"> <name>Max Mustermann</name> </kontakt>
XSLT-Code:
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>Einfache Verzweigung - XSLT Code-Beispiel</title> <meta charset="utf-8" /> <meta name="robots" content="noindex,nofollow" /> <meta name="publisher" content="Homepage-Webhilfe" /> </head> <body> <xsl:value-of select="/kontakt/name" /> <xsl:if test="/kontakt/@privat = 'ja'"> <i> (Privat)</i> </xsl:if> </body> </html> </xsl:template> </xsl:stylesheet>
Wichtig: Die hier genannte Verzweigungsart kennen Sie vielleicht aus anderen Programmiersprachen. In XSLT gibt es jedoch
keinen else
-Zweig, um zusätzlich den Fall abzudecken, wenn die Bedingung nicht zutrifft.
Mehrfache Verzweigung
Eine mehrfache Verzweigung wird i. d. R. immer dann verwendet, wenn Sie einen Wert mit unterschiedlichen Werten vergleichen
wollen oder wenn an Hand von mehreren Bedingungen eine Auswahl getroffen werden soll. Bei mehrfachen Verzweigungen in
XSLT ist es auch möglich, anders als in anderen Programmiersprachen, z. B. auf einen Wertebereich zu prüfen oder Teilbedingungen
mit and
und or
zu verknüpfen (also so wie bei einfachen Verzweigungen auch). Dies liegt daran, da
die mehrfache Verzweigung aus lauter einzelnen Bedingungen besteht, die theoretisch völlig unterschiedlich sein können. Der
Code, welcher innerhalb der ersten zutreffenden Bedingung notiert wird, wird ausgeführt, weitere Bedingungen werden dann nicht
geprüft und dessen Code natürlich auch nicht ausgeführt.
Um eine solche Abfragereihe zu definieren, notieren wir zu allererst das Element choose
. Dieses Element
verfügt über keine weiteren Attribute. Innerhalb des choose
-Elements werden nun ein oder mehrere when
-Elemente
sowie bei Bedarf ein otherwise
-Element notiert. Die when
-Elemente stellen die einzelnen Bedingungen
dar. Die eigentliche Bedingung wird dabei im test
-Attribut angegeben. Der Code innerhalb des Elements wird nur
dann ausgeführt, wenn die Bedingung zutrifft. Mit dem otherwise
-Element können Sie den Fall abdecken, wenn keine
der Bedingungen (definiert innerhalb der when
-Elemente) zutrifft. Das otherwise
-Element wird (falls
benötigt) immer als letztes notiert und verfügt auch über keine Attribute.
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml-stylesheet href="mehrfache-verzweigung.xsl" type="text/xsl" ?> <kontakt anrede="hr"> <name>Max Mustermann</name> </kontakt>
XSLT-Code:
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>Mehrfache Verzweigung - XSLT Code-Beispiel</title> <meta charset="utf-8" /> <meta name="robots" content="noindex,nofollow" /> <meta name="publisher" content="Homepage-Webhilfe" /> </head> <body> <xsl:choose> <xsl:when test="/kontakt/@anrede = 'hr'"> Herr </xsl:when> <xsl:when test="/kontakt/@anrede = 'fr'"> Frau </xsl:when> <xsl:when test="/kontakt/@anrede = 'f'"> Firma </xsl:when> <xsl:otherwise> ??? </xsl:otherwise> </xsl:choose> <xsl:value-of select="/kontakt/name" /> </body> </html> </xsl:template> </xsl:stylesheet>