Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


xsl:choose, xsl:if

Zusammenfassung:

xsl:if bietet eine einfache Fallprüfung. xsl:choose erlaubt eine erweiterte, mehrstufige Fallunterscheidung nach dem Konzept "if elseif else". In beiden Fällen gibt es einige Besonderheiten zu beachten.

xsl:choose, xsl:if

xsl:if

xsl:if erlaubt eine einfache Fallprüfung.

Wenn wir aus einem XML Input einen bestimmten Menschen ansprechen, der 876.54 Euro verdient, und prüfen, ob dieser Verdienst über 1000 Euro liegt, dann ist das Ergebnis leer.

<xsl:variable name="vPerson" select="/Orte/Ort[2]/Mensch[3]"/>
<xsl:if test="$vPerson/Gehalt &gt; 1000">reich</xsl:if>

Von einiger Tragweite ist dieser Ansatz im Zusammenhang mit der Numerierung durch die position()-Funktion. Herkömmlichen Programmiergewohnheiten folgend, arbeiten viele Developer mit einer Schleife, in die eine Fallprüfung eingebettet ist.

<xsl:for-each select="/Orte/Ort/Mensch">
  <xsl:if test="Gehalt &gt; 1000">
    <m p="{position()}">
      <xsl:value-of select="vorname"/>
    </m>
  </xsl:if>
</xsl:for-each>

XSLT-Prozessoren generieren das folgende Ergebnis, die die Numerierung aus der Reihenfolge der in XPath "/Orte/Ort/Mensch" angesprochenen Elemente bezieht.

  <m p="2">Nicole</m>
  <m p="3">Stefan</m>
  <m p="13">Willi</m>
  <m p="17">Betty</m>

Ist jedoch eine klar aufsteigende Numerierung gewünscht, dann muß die Liste der durch XPath adressierten Elemente sich auf die relevanten Elemente konzentrieren:

<xsl:for-each select="/Orte/Ort/Mensch[Gehalt &gt; 1000]">        
    <m p="{position()}">
      <xsl:value-of select="vorname"/>
    </m>        
</xsl:for-each>

Das Ergebnis lautet dann:

  <m p="1">Nicole</m>
  <m p="2">Stefan</m>
  <m p="3">Willi</m>
  <m p="4">Betty</m>

Siehe in diesem Zusammenhang auch meine Anmerkungen zum Thema Logische Operatoren.

xsl:choose

Mit Hilfe der xsl:choose-Anweisung ist es möglich, erweiterte Fallunterscheidungen (if - elseif - else) zu definieren. Dabei werden nacheinander die when-tests durchgeführt. Ist einer dieser Tests positiv, dann wird der Wert weiter verwendet, der diesem Fall zugeordnet ist; die eventuell nachfolgenden Fälle werden dann nicht mehr betrachtet. Trifft kein when-Test zu, dann kommt der "SONST"-Fall (xsl:otherwise) zum Tragen.

Ein xsl:choose muss mindestens ein xsl:when aufweisen. Zusätzliche xsl:when oder das xsl:otherwise (dieses darf höchstens einmal deklariert werden, und zwar am Schluß.

pic/choose.png

<xsl:variable name="vPerson" select="/Orte/Ort[2]/Mensch[3]"/>
<xsl:choose>
  <xsl:when test="$vPerson/Gehalt &gt;= 1000">reich</xsl:when>
  <xsl:when test="$vPerson/Gehalt &lt; 100">arm</xsl:when>
  <xsl:otherwise>wohlhabend</xsl:otherwise>
</xsl:choose>

Da dieser Mensch 876.54 Euro verdient, ist das Ergebnis dieser Unterscheidung:

<erg>wohlhabend</erg>

qrpic/choose.jpg

wg / 22. September 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

Mobil: 0151. 750 360 61 * eMail: info10@wilfried-grupe.de