XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Funktionen / Stringfunktionen / XPath: normalize-space
![]() |
![]() |
➪ Die normalize-space-Funktion löscht führende und schließende Leerzeichen in einem String.
Auf dieser Seite: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, dass die übergebene Zeichenkette einen einzigen String darstellt, nicht aber eine Sequenz aus mehreren Strings. Um auch diese Konstellation zu bewältigen, können Sie die string-join-Funktion zu Hilfe nehmen, die aus einer Sequenz wieder einen String erstellt.
Um ein Beispiel zu generieren, können Sie 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 Sie sich mit 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 Sie also den folgenden String einschließlich führender und schließender Leerstellen.
' |1|2|3|4|5| '
Wollen Sie 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'
Ein xs:string 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
fg h;	i	jk </xsl:variable>
<erg2>
<xsl:value-of select="normalize-space($vstring)"/>
</erg2>
Das Ergebnis des vorstehenden Aufrufs beinhaltet die Sonderzeichen nicht mehr. Beachten Sie auch die zwei gelöschten Leerzeichen in der ursprünglichen Zeichenkette "fg h".
<erg2>ab;cde fg h; i jk</erg2>
Siehe auch tokenize.
wg / 4. April 2018
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de