DevTrain

Autor: Andreas Rauch

XSL - Tschuldigung, ist da ein String dazwischen?

Einige Artikel zuvor, haben wir das Thema Funktionen in XSL besprochen. Nun werden wir - wie versprochen - diese ein wenig mit string-Funktionen - erweitern.
 
Wie stellen wir fest wieviele Zeichen in einem Feld enthalten sind? Das stellen wir mit string-length() fest:
 

<xsl:value-of select="string-length('2000-10-25')"/>  ' ergibt 10
<xsl:value-of select="string-length(//h1)"/>          ' oder die Abfrage per XPATH
<xsl:value-of select="//book[string-length(title) > 20]/title"/>  'mit Bedingung

      
Falls wir mal mit überflüssigen Leerzeichen zu kämpfen haben, hilft uns die normalize-space() Funktion weiter. Die Arbeitsweise von normalize-space() möchte ich mal so umschreiben. Sie minimiert eine Leerzeichenkette auf max. ein Leerzeichen.
 
<xsl:value-of select="normalize-space(' das ist ein    Test ')"/> 'das ist ein Test
<xsl:value-of select="normalize-space(//book/description)"/>  ' hier mit XPATH
 
Achtung: Führende und abschliessende Leerzeichen bleiben erhalten.
 
Für spezielle Fälle ist die translate-Funktion recht brauchbar
 
Falls eine Anwedung von Ihnen case-sensitiv ist Ihre Anwednung beipielsweise Grossbuchstaben verlangt, dann lassen Sie sich die doch übersetzten
 
<xsl:value-of select="translate('ebbe', 'abcdefg', 'ABCDEFG')"/> 
 
Die translate() besteht aus 3 Parametern: Den zu vergleichenden String, der Übersetzungscode und die Übersetzungszeichen.

Im obigen Beispiel wird "ebbe" verglichen mit "abcdefg". Sind identische Zeichen vorhanden, so wird das identische Zeichen mit dem ersetzt, das an gleicher Stelle in "ABCDEFG" steht. Also e kommt in "abcdeg" an 6. Stelle vor. An der 6. Stellen in "ABCDEFG" steht E. Somit wird ein "e" mit "E" übersetzt.
 
Oder wollen wir Leerzeichen komplett rausfiltern? Dann können wir das auch mit der translate() machen.
 

 <xsl:value-of select="translate(' alle Leerzeichen entf e rn en ', ' ', '')"/> 

'ergibt "alleLeerzeichenentfernen"

 

Abegesehen davon gibt es noch ein besondere Operationen, die man mit der string() Funktion durchführen kann.
Das Ergebnsi einer string Funtkion  kann dabei boolean, Integer, text oder Werte mit Kommastellen annnehmen.
 
<xsl:value-of select="string(0 div 0)"/> ' Ergebnis: NaN (not a number - math. nicht definiert)

<xsl:value-of select="string(2 div 0)"/> ' Ergebnis: Infinity

<xsl:value-of select="string(2 div 1)"/> ' 2

<xsl:value-of select="string(1 = 1)"/> ' true

<xsl:value-of select="string(//book/price)"/> ' 17,40  aus XPATH

<xsl:value-of select="string(//book)"/> ' Robin Hood und die Männer....
 
 
Sehen sie hier das xsl File mit allen Funtkionen. Natürlich auch zum runterladen.
 

 <?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="string.xsl"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html"/>
 <xsl:template match="/">
  <html>
   <body>
    <h3>string-length() Function</h3>
    <ul>
     <li>
      <b>string-length('2000-10-25')</b>=
      <xsl:value-of select="string-length('2000-10-25')"/>
     </li>
     <li>
     <b>string-length(//h1)= </b>
     <xsl:value-of select="string-length(//h1)"/>
     </li>
     <li>
      <b>string-length('')</b>=
      <xsl:value-of select="string-length('')"/>
     </li>
     <li>
      <b>//book[string-length(title) > 20]/title</b>=
      <xsl:value-of select="//book[string-length(title) > 20]/title"/>
     </li>
    </ul>   
   <h3>string() Function</h3>
   <ul>
   <li>
   <b>string(0 div 0) =</b>
   <xsl:value-of select="string(0 div 0)"/>
   </li>
   <li>
   <b>string(2 div 0)=</b>
   <xsl:value-of select="string(2 div 0)"/>
   </li>
   <li>
   <b>string(2 div 1)=</b>
   <xsl:value-of select="string(2 div 1)"/>
   </li>
   <li>
   <b>string(2048 div 16)=</b>
   <xsl:value-of select="string(2048 div 16)"/>
   </li>
   <li>
   <b>string(1 = 1)=</b>
   <xsl:value-of select="string(1 = 1)"/>
   </li>
   <li>
   <b>string(//book/price)=</b>
   <xsl:value-of select="string(//book/price)"/>
   </li>
   <li>
   <b>string(//book)=</b>
   <xsl:value-of select="string(//book)"/>
   </li>
   </ul>
   <h3>normalize-space() Function</h3>
   <ul>
   <li>
   <b>normalize-space(' this    is a test ')</b> = {
   <xsl:value-of select="normalize-space(' this    is a test ')"/>
   } </li>
   <li>
   <b>normalize-space(' ')</b> = {
   <xsl:value-of select="normalize-space(' ')"/>
   } </li>
   <li>
   <b>normalize-space(//book/description)</b> = {
   <xsl:value-of select="normalize-space(//book/description)"/>
   } </li>
   </ul>
   <h3>Translate</h3>
   <ul>     
   <li>
   translate('abc', 'abcdefg', 'ABC')
   <xsl:value-of select="translate('ebbe', 'abcdefg', 'ABCDEFG')"/>
   </li>
   <li>
   translate("--aaa--","abc-","ABC")
   <xsl:value-of select="translate('--aaa--','abc-','ABC')"/>
   </li>
   <li>
   translate("&#10;","abc-","ABC")
   <xsl:value-of select="translate('--aaa--','abc-','ABC')"/>
   </li>

   <li>
   translate("--aaa--","abc","ABC")
   <xsl:value-of select="translate('--aaa--','abc','ABC')"/>
   </li>
   <li>
   translate(' remove all spaces ', ' ', '')=
   <xsl:value-of select="translate(' remove all spaces ', ' ', '')"/>
   </li>
   </ul>
   </body>
   </html>
   <h1>Andreas Rauch</h1>
    <book>
     <title>Robin Hood und die Männer aus dem Sherwood forest</title>
     <price>17,40</price>
     <description>D a s i   st ein Super Buch mit vielen    Lerrräumen</description>
     <title>Merlin</title>
     <price>17,20</price>
           <title>Das Universum in einer Nussschale</title>
     <price>17,00</price>
    </book>   
 </xsl:template>
</xsl:stylesheet>
 

 
Viel Spaß damit!
 
 

Erfasst am: 06.06.2002 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=776
© Copyright 2003 ppedv AG - http://www.ppedv.de