Bedingungen

Zur Formulierung von Bedingungen stehen in XSLT zwei Elemente zur Verfügung. Das eine ist das <xsl:if>-Element und das andere das <xsl:choose>-Element.

<xsl:if>

Mit dem Element <xsl:if> lassen sich Bedingungen festlegen. Das Element verfügt über das obligatorische Attribut test, das als Wert eine Musterprüfung verlangt. Anders als in den anderen Programmiersprachen üblich, gibt es in XSLT die Verbindung von einem IF mit einem ELSE nicht. Betrachten wir nun ein kleines Beispiel.

Das Stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="iso-8859-1" version="1.0"/>
    <xsl:template match="Gedichtsammlung">
        <html>
           <body>
             <xsl:apply-templates/>
           </body>
        </html>
    </xsl:template>
    <xsl:template match="Autor">
        <br/>
        <h4>
            <xsl:apply-templates/>
        </h4>
    </xsl:template>
    <xsl:template match="Vorname">
            <xsl:apply-templates/>
            <xsl:text> </xsl:text>
    </xsl:template>
    <xsl:template match="Nachname">
            <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="Titel">
        <h2>
            <xsl:apply-templates/>
        </h2>
    </xsl:template>
    <xsl:template match="Strophe">
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:template>
    <xsl:template match="Vers">
            <xsl:apply-templates/>
        <br/>
    </xsl:template>
    <xsl:template match="Gedicht">
        <br/>
        <xsl:if test="@Sprache='el'">Das Gedicht ist auf Griechisch.</xsl:if>     (1)
        <xsl:if test="@Sprache='en'">Das Gedicht ist auf Englisch.</xsl:if>
        <xsl:if test="@Sprache='de'">Das Gedicht ist auf Deutsch.</xsl:if>
           <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet> 

(1) Wie zu sehen ist, wird der Inhalt des <xsl:if>-Elements dann ausgeführt, wenn das Muster im test-Attribut eine Übereinstimmung im Quelldokument findet.

Browser-Ansicht des Zieldokumentes:

Browser-Ansicht: Beispiel - Bedingungen

Aufgabe 4

Schreiben Sie das obige Stylesheet so um, dass nur griechische Gedichte erscheinen.

> > zur Lösung von Aufgabe 4

   

<xsl:choose>

Das <xsl:choose>-Element mit seinen Kindelementen <xsl:when> und <xsl:otherwise> entspricht dem "switch-case-Konstrukt" in anderen Programmiersprachen.

Dieses Konstrukt erlaubt es, mehrere Alternativen anzugeben und schließlich einen Wert, der bei nicht zutreffenden Alternativen stattdessen genommen wird. Das Konstrukt muss mit dem Element <xsl:choose> eingeleitet werden. Das Element kann beliebig viele <xsl:when>-Kindelemente enthalten und genau ein <xsl:otherwise>-Element. Die <xsl:when>-Elemente besitzen ebenso wie das <xsl:if>-Element ein obligatorisches Attribut test. Wenn dessen Muster zutrifft, wird auch hier der Inhalt des Elements in den Ergebnisbaum kopiert. Der eigentliche Unterschied zwischen dem <xsl:if>-Element und dem <xsl:choose>/<xsl:when>-Konstrukt besteht in der Möglichkeit der Verwendung des <xsl:otherwise>-Elements, das, wenn keines der <xsl:when>-Elemente zutrifft, in Aktion tritt.

Das Stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output encoding="iso-8859-1" version="1.0"/>
    <xsl:template match="Gedichtsammlung">
        <html>
            <body>
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="Autor">
           <br/>
           <h4>
               <xsl:apply-templates/>
          </h4>
    </xsl:template>
    <xsl:template match="Vorname">
              <xsl:apply-templates/>
              <xsl:text> </xsl:text>
    </xsl:template>
    <xsl:template match="Nachname">
              <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="Titel">
          <h2>
              <xsl:apply-templates/>
          </h2>
    </xsl:template>
    <xsl:template match="Strophe">
          <p>
              <xsl:apply-templates/>
          </p>
    </xsl:template>
    <xsl:template match="Vers">
              <xsl:apply-templates/>
              <br/>
    </xsl:template>
    <xsl:template match="Gedicht">
              <br/>
              <xsl:choose>                                                                 (1)
                  <xsl:when test="@Sprache='el'">Das Gedicht ist auf Griechisch.</xsl:when> 
                  <xsl:when test="@Sprache='en'">Das Gedicht ist auf Englisch.</xsl:when>  (2)
                  <xsl:otherwise>Das Gedicht ist auf Deutsch.</xsl:otherwise>              (3)
             </xsl:choose>
             <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

(1) Das <xsl:choose>-Element umschließt das Konstrukt. Die Elemente <xsl:when> und <xsl:otherwise> sind nur als Kindelemente des <xsl:choose>-Elements erlaubt.

(2) Das <xsl:when>-Element wird dann ausgeführt, wenn das Muster im Attribut test zutrifft. In diesem Fall wird gefragt, ob der Inhalt des aktuellen Knotens – also @Sprache – den Wert „en“ hat. Wenn der Wert mit dem Muster übereinstimmt, wird der Text "Das Gedicht ist auf Englisch" ausgegeben.

(3) Das <xsl:otherwise>-Element kommt dann zum Einsatz, wenn keines der <xsl:when>-Elemente zugetroffen hat.

<< zurück vor >>

 

Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © dpunkt.verlag GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSL-FO in der Praxis" 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.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, fon 06221-14830, fax 06221-148399, hallo(at)dpunkt.de