XPath 3.0, XPath 2.0, XPath 1.0 / XPath Funktionen / Stringfunktionen / XPath: normalize-space

XPath: normalize-space

XPath: normalize-space

➪ Die "normalize-space"-Funktion löscht führende und schließende Leerzeichen in einem String.

Im einfachsten Fall sieht das so aus:


<xsl:variable name="x" as="xs:string">    1  2  3  4  5   </xsl:variable>
<ergebnis>
<xsl:value-of select="normalize-space($x)"/>
</ergebnis>

Das Ergebnis lautet:


<ergebnis>1 2 3 4 5</ergebnis>

Wichtig ist dabei, daß die übergebene Zeichenkette einen einzigen String darstellt, nicht aber eine Sequenz aus mehreren Strings. Um auch diese Konstellation zu bewältigen, können wir uns die "string-join"-Funktion zu Hilfe nehmen, die aus einer Sequenz wieder einen String erstellt.

Um ein Beispiel zu generieren, können wir eine zweite Variable "y" anlegen, die über das Komma (",") eine Sequenzverkettung durchführt:


<xsl:variable name="y" as="xs:string+">
  <xsl:for-each select="'   ', 1 to 5, '      '">
    <xsl:value-of select="."/>
  </xsl:for-each>
</xsl:variable>

Der Aufruf der "normalize-space"-Funktion mit dieser Sequenz ...


<xsl:value-of select="normalize-space($y)"/>

... hätte die Fehlermeldung zur Folge:


A sequence of more than one item is not allowed 
as the first argument of normalize-space() ("", "1", ...)

Den generierten String können wir uns mit Hilfe der "string-join"-Funktion verdeutlichen, die aus der Sequenz einen String mit führenden und schließenden Leerzeichen generiert.


<xsl:value-of select="string-join($y, '|')"/>

Im Ergebnis haben wir also den folgenden String einschließlich führender und schließender Leerstellen.


'   |1|2|3|4|5|      '

Wollen wir keine Trennzeichen zulassen, so kann der Aufruf lauten:


<xsl:value-of select="string-join($y, '')"/>

Ergebnis:


'    1 2 3 4 5       '

Die "normalize-space"-Funktion verkürzt diese Ausgabe.


<xsl:value-of select="normalize-space( string-join($y, ''))"/>

Das Ergebnis lautet dann:


'1 2 3 4 5'

Sonderzeichen

Ein kann auch Sonderzeichen wie Carriage Return (#xD), Linefeed (#xA) oder Tabulator (#x9) beinhalten. Das ist bei xs:normalizedString jedoch untersagt. Die Funktion "normalize-space" löscht daher nicht nur führende und schließende Leerzeichen, sondern auch diese Sonderzeichen.


<xsl:variable 
     name="vstring" 
     as="xs:string"> ab;cde&#xA;fg  h;&#x9;i&#x9;jk </xsl:variable>
<erg2>
   <xsl:value-of select="normalize-space($vstring)"/>
</erg2>

Das Ergebnis des vorstehenden Aufrufs beinhaltet die Sonderzeichen nicht mehr. Beachten wir auch die zwei gelöschten Leerzeichen in der ursprünglichen Zeichenkette "fg h".


<erg2>ab;cde fg h; i jk</erg2>

Siehe auch .

wg / 8. Februar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







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/normalizespace.html