xsl:if

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 6.)

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

 

Die Instruktion xsl:if dient zur Formulierung von Bedingungen, die entscheiden, ob ein in der Instruktion enthaltener Templateblock ausgewertet oder übersprungen werden soll.

Klassifizierung Instruktion
Funktionsgruppe Bedingte Verarbeitung
Einführung XSLT 1.0

Position im Stylesheet und erlaubte Inhalte:

Die Instruktion xsl:if darf überall innerhalb von Templateblöcken xsl:template vorkommen. Mehrere xsl:if können verschachtelt werden.

Inhalt der Instruktion xsl:if ist ein Templateblock, bestehend aus beliebigen XSLT-Instruktionen, Literal Result Elements und Text, der instanziiert wird, wenn die gestellte Bedingung erfüllt ist.

Attribute:

Es gelten die Standardattribute. Desweiteren besitzt die Instruktion xsl:if ein obligatorisches Attribut test.

test

Wert

xpath-expression

Verwendung

Obligatorisch

Einführung

XSLT 2.0

Das test-Attribut enthält einen XPath-Ausdruck, der zu einem booleschen Wert ausgewertet wird. Ergibt der Ausdruck true, so wird der in der Instruktion enthaltene Templateblock ausgeführt, ergibt er false, wird dieser übersprungen.

Verwendungszweck:

Die Anweisung xsl:if wird eingesetzt, wenn ein Anweisungsabschnitt abhängig von einer Bedingung ausgeführt oder übersprungen werden soll. Die Formulierung der Bedingung erfolgt mit Hilfe eines XPath-Ausdrucks, der zu einem booleschen Wert ausgewertet wird. Dieser Ausdruck kann dabei in mehrere Einzelausdrücke zerfallen, die jeweils für sich einen booleschen Wert ergeben. Die Einzelausdrücke können durch boolesche Operatoren and und or verknüpft und in diesem Rahmen auch jeweils einzeln durch die XPath-Funktion fn:not() negiert werden.

Die Instruktion kann in Verbindung mit den XSLT-Funktionen element-available() oder function-available() verwendet werden, um Erweiterungs­instruktionen oder -funktionen im Inneren ihres Templatekörpers von jenen XSLT-Prozessoren abzuschirmen, die diese nicht interpretieren können.

Achtung – Kein ELSE-Zweig für xsl:if-Bedingungen möglich
Die xsl:if-Instruktion ist analog zu einem IF-Statement zu sehen, wie es in den meisten Programmiersprachen implementiert ist. Hierbei ist jedoch zu beachten, dass in XSLT keine mit einem vorangehenden xsl:if zu ver­knüpfende Instruktion, wie etwa ein xsl:else existiert, die unmittelbar einem ELSE oder ELSE IF entspräche. Sollen alternative Anweisungsblöcke definiert werden, muss auf xsl:choose und innerhalb von diesem auf xsl:when und xsl:otherwise-Instruktionen zurückgegriffen werden.

Beispiele:

Beispiel 1 – Prüfen auf vorgegebenen Attributwert:

<xsl:if test="@pruefwert='vorgabewert'">
  <p>Der Vorgabewert wird eingehalten.</p>
</xsl:if>

Besitzt der Current Node ein Attribut pruefwert mit dem angegebenen Wert, so wird die Nachricht ausgegeben.

Beispiel 2 – Prüfen auf bestimmtes Kindelement:

<xsl:if test="fn:not(telefonnummer)">
  <p>Keine Telefonnummer angegeben!</p>
</xsl:if>
  

Besitzt der Current Node kein Kindelement <telefonnummer>, so wird die ent­sprechende Nachricht ausgegeben.

Beispiel 3 – Prüfen auf Erweiterungsinstruktion:

<xsl:if test="element-available('erw:superspezial')">
  <!-- Verwendung der Erweiterungsinstruktion -->
  <erw:superspezial />
</xsl:if>

Die Erweiterungsinstruktion wird nur ausgeführt, wenn der XSLT-Prozessor sie zuvor im Rahmen des Tests von xsl:if erkannt hat, ansonsten wird der Block ausgelassen.

Beispiel 4 – Buchtitelliste ausgeben:

<xsl:for-each select="buchhandel/buch">
  <xsl:value-of select="titel"/>
  <xsl:if test="fn:position()!=fn:last()">
    <xsl:text>, </xsl:text>
  </xsl:if>
  <xsl:if test="fn:position()=fn:last()-1">
    <xsl:text> und </xsl:text>
  </xsl:if>
  <xsl:if test="fn:position()=fn:last()">
    <xsl:text>.</xsl:text>
  </xsl:if>
</xsl:for-each>

Bei der Ausgabe einer Liste von Buchtiteln wird mit Hilfe von xsl:if und der Funktion fn:last() entschieden, ob nach einem Titel jeweils ein Komma, ein »und« oder der abschließende Punkt ausgegeben werden soll.

Elementdefinition:

XSLT 1:

<!-- Category: instruction -->
<xsl:if 
     test = boolean-expression>

     <!-- Content: template -->
</xsl:if>

XSLT 2.0:

<!-- Category: instruction -->
<xsl:if
     test = expression>

     <!-- Content: sequence-constructor -->
</xsl:if>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn