Entscheidungen mit XSLT: xsl:if

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

Die Instruktion xsl:if stellt im Grunde eine Art praktischen Schalter dar, der Teile eines Template-Blocks an oder abschalten kann. Hierbei ist nur der IF-Zweig einer typischen Bedingung vorhanden. Es gibt für xsl:if nur die Wenn-Entscheidung, kein Andernfalls, also kein korrespondierendes xsl:else.

Ergibt die Auswertung des Werts des test-Attributs true, so wird der Inhalt des xsl:if-Containers ausgeführt, andernfalls wird er ersatzlos übersprungen.

<xsl:template match="buch">
  <p><xsl:apply-templates/><xsl:if test="@isbn"><br/>(ISBN: <xsl:value-of select="@isbn"/>)</xsl:if></p>
</xsl:template>

Code-Beispiel: kap02/2.02.1/buchhande1-if1.xsl (Auszug).

Ein Template, das <buch>-Elemente verarbeitet, gibt, in runde Klammern gestellt, die ISBN-Nummer des verarbeiteten Buchs aus, sofern die entspre­chende Information vorliegt. Der Test lautet: »isbn-Attribut vorhanden? ja/nein«. Der Wert des Attributs spielt keine Rolle. Der Attributwert könnte hier allerdings leer sein (dies ist bei zwei Büchern der Fall!), was Sie dadurch berücksichtigen sollten, dass Sie die Bedingung entsprechend erweitern:

<xsl:if test="@isbn != ' '">

Dieser Test ist true, wenn der Attributwert nicht der leere String ist, und false, sowohl, falls das Attribut existiert, aber leer ist, als auch, wenn es fehlt.

<xsl:template match="buch">
  <p><xsl:if test="@ersch-jahr &gt; 2003"><i>Neu erschienen:</i><br /></xsl:if><xsl:apply-templates/></p>
</xsl:template>

Code-Beispiel: kap02/2.02.1/buchhande1-if1b.xsl (Auszug).

Hier wird für Bücher, deren Erscheinungsjahr nach 2003 liegt, ein entsprechen­der Vermerk eingerückt. Das Operatorsymbol > muss auch hier (wie bei den Predicates) als Entity-Referenz &gt; umschrieben werden. Selbstverständlich können Sie an dieser Stelle auch die Operatoren = (gleich), &lt; (kleiner) oder != (ungleich) verwenden.

Hier ist ein Beispiel, das für Bücher mit einem Preis unter 15 € ein Sonder­­angebotsvermerk und eine Trennlinie einfügt (die Währungsangabe des Preises wird nicht berücksichtigt):

<xsl:template match="buch">
  <p><xsl:if test="preis &lt; 15"><b>Sonderangebot:</b><br/></xsl:if><xsl:apply-templates/></p>
  <xsl:if test="preis &lt; 15">
    <hr/>
  </xsl:if>
</xsl:template>

Code-Beispiel: kap02/2.02.1/buchhande1-if2.xsl (Auszug).

Auf diesem Wege kann auch der Ausschluss bestimmter Items einer Eingabese­quenz von der Verarbeitung vorgenommen werden, falls es nicht möglich oder nicht sinnvoll ist, eine Predicate-Filterung im Vorfeld vorzunehmen.

   

<< zurück vor >>
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