Gern stehe ich zur fachlichen Unterstützung in XML-Technologien, C#.NET, VisualBasic.NET und Java zur Verfügung. Sprechen Sie mich einfach an: Mail oder ☎ 0151 . 750 360 61


XSL-Übersicht / XSLT 2.0: Erweiterte Syntax

XSLT 2.0: Erweiterte Syntax

XSLT 2.0: Erweiterte Syntax

➪ Ab XSLT 2.0 haben Sie die Möglichkeit, komplexe Logiken (Schleifen, Bedingungen) mit einer erweiterten Syntax zusammenzufassen.

Auf dieser Seite:

Auch hier können zum besseren Verständnis der Programmlogik lokale Kommentare sinnvoll sein. Diese lokalen Kommentare sind in der Syntax "(: Kommentar :)" abgefasst.


<erg>
  <xsl:value-of 
       select="if (8 &gt; 5) 
               then ('8 groesser als 5') 
               else () 
               (:lokaler Kommentar, wird nicht ausgegeben:)" />  
</erg>

Die Ausgabe im Ergebnisdokument lautet:


<erg>8 groesser als 5</erg>

Sinnvoll können solche Kommentare bei komplexen Schleifen mit Fallunterscheidung werden:


<erg>
  <xsl:for-each select="for $m in //Mensch 
       (: Schleife ueber alle Mensch-Nodes :) 
       return if (matches($m/name, '[S][a-z]*')) 
              then ($m/name) 
       (:filtere alle heraus, deren name mit S beginnt:) 
              else () 
       (:sonst keine Rueckgabe:)">
    <name>
      <xsl:value-of select="."/>
    </name>
  </xsl:for-each>
</erg>

Auch hier erscheint im Output kein Kommentar:


<erg>
  <name>Sprachlos</name>
  <name>Sagblos</name>
  <name>Sorglos</name>
  <name>Sinnlos</name>
  <name>Schlaflos</name>
</erg>

Type-Casting

Ebenfalls sehr vorteilhaft ist die Kontrolle über das Type-Casting, das in XSLT 1.0 noch automatisiert verläuft und daher als unsicher bezeichnet werden muss. So werden in XSLT 1.0/XPath 1.0 Zahlen wie "1.23" als double gecastet, was jedoch zu Rundungsdifferenzen führen kann. In XSLT 2.0 / XPath 2.0 hat der Developer bessere Kontrolle über das Type-Casting.


<xsl:template name="Type_Casting">
 <ergebnis>
  <xsl:for-each select="//Mensch">
   <xsl:if test="name castable as xs:string">
   <Mensch>
    <vn><xsl:value-of select="vorname"/></vn>
    <einkommen>
     <xsl:value-of select="xs:decimal(Gehalt)"/>
    </einkommen>
   </Mensch>
   </xsl:if>
  </xsl:for-each>
 </ergebnis>
</xsl:template>

Alle oder nur einige?

Mit some und every können Sie prüfen, ob einige oder alle Nodes eine bestimmte Bedingung erfüllen.


<xsl:template name="Alle_oder_Einige">
 <ergebnis>
  <xsl:choose>
   <xsl:when
    test="every $x in /Orte/Ort 
          satisfies $x/Mensch/Gehalt &gt; 1000">
    Alle Einwohner verdienen mehr als 1000 Euro
   </xsl:when>
   <xsl:when 
    test="some $x in /Orte/Ort 
          satisfies $x/Mensch/Gehalt &gt; 1000">
    Einige Einwohner verdienen mehr als 1000 Euro
   </xsl:when>
   <xsl:otherwise>
        Niemand verdient mehr als 1000 Euro
   </xsl:otherwise>
  </xsl:choose>
 </ergebnis>
</xsl:template>

Das Ergebnis ist dann leicht nachvollziehbar:


<ergebnis>Einige Einwohner verdienen mehr als 1000 Euro
</ergebnis>

wg / 1. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


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

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

www.wilfried-grupe.de/XSL20_erweiterte_Syntax.html