« XSL-Start

Bedingungen (if,choose)

Lernziel

Sie lernen, wie Sie in XSL Programmverzweigungen durch Fallunterscheidung realisieren.

Handlungsanweisungen

Aufgaben:
  1. Die CDs, die in Europa entstanden sind, sollen in der Tabelle rot erscheinen, die anderen blau.
  2. Geben Sie nur die Namen aus, die mehr als 200 Punkte haben! Gegeben ist folgende XML-Datei:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="if.xsl" ?>
<ergebnisse>
  <ergebnis>
    <name>Crystol Freak</name>
    <punkte>453</punkte>
  </ergebnis>
  <ergebnis>
    <name>Demian</name>
    <punkte>199</punkte>
  </ergebnis>
  <ergebnis>
    <name>Ueberflieger</name>
    <punkte>347</punkte>
  </ergebnis>
  <ergebnis>
    <name>CaptainX</name>
    <punkte>106</punkte>
  </ergebnis>
</ergebnisse>
Zusatz:Geben Sie die CDs Ihrer CD-Datenbank aus, die von deutschen Bands produziert wurden.

Bedingte Ausgaben mit if

Bedingte Ausgaben könne Sie mit if realisieren, ein else ist nicht möglich.

1
2
3
4
5
6
<xsl:if test="Bedingung">
 ... Bedingte Ausgabe...
</xsl:if>
<xsl:if test="nachname='Becker'">
 <xsl:value-of select="vorname" />
</xsl:if>

Choose-Verzweigungen

Verzweigungen können Sie auch mit choose erreichen. Hier haben Sie auch else-Regeln, die bei choose „otherwise“ heißen.

1
2
3
4
5
6
7
8
<xsl:choose>
<xsl:when test="Bedingung">
 ....irgendeine Ausgabe....
</xsl:when>
<xsl:otherwise>
 ...eine andere Ausgabe...
</xsl:otherwise>
</xsl:choose>

Vergleichsoperatoren

Welche Vergleichsoperatoren kennt XSL?

=      ist gleich
!=     nicht gleich
&lt;   weniger als
&gt;   größer als
&lt;=  kleiner gleich
&gt;=  größer gleich

Die Operatoren &lt; und &gt; lassen sich jedoch nur wirklich sinnvoll auf Ganzzahlen anwenden. Die < und > müssen mit &lt; und &gt; umschrieben werden.

Logische Operatoren

Welche logischen Operatoren kennt XSL?

and
or
not

Beispiel

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<xsl:when test="alter &gt; '20' and alter &lt; '30'">
...
</xsl:when>
<xsl:when test="name='Heinz' or name='Uwe'">
...
</xsl:when>
<!--Wenn das Element email in der XML-Datei nicht vorhanden ist-->
<xsl:when test="not(email)">
...
</xsl:when>
Ziel:Je nach Geschlecht soll bei der Ausgabe eine unterschiedliche Hintergrundfarbe verwendet werden.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>

<xsl:template match="/">

<xsl:for-each select="adresse/person">
  <xsl:choose>
    <xsl:when test="anrede='Frau'">
      <p bgcolor="pink">
        <xsl:value-of select="name/nachname"/>
        <xsl:value-of select="name/vorname"/>
      </p>
    </xsl:when>
    <xsl:otherwise>
      <p bgcolor="lightblue">
        <xsl:value-of select="name/nachname"/>
        <xsl:value-of select="name/vorname"/>
      </p>
    </xsl:otherwise>
  </xsl:choose>
</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

Für jede Person wird getestet, ob die Anrede Frau ist. Ist dem so, wird ein lila, ansonsten ein hellblauer Hintergrund gewählt. In beiden Fällen wird der Vor- und Nachname in eine Tabellenzeile geschrieben.