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


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.

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 -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'

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 Sie auch die zwei gelöschten Leerzeichen in der ursprünglichen Zeichenkette "fg h".


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

Siehe auch .

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