xsl entfernt alle nicht numerischen Zeichen und den führenden 1

8

Ich muss eingehende Telefonnummern-Strings in ein standardisiertes Format konvertieren, das keine nicht-numerischen Zeichen enthält, und die führende Nummer entfernen, wenn sie 1 ist.

Zum Beispiel:

"+ 1 (222) 333-4444 x 5555" wird zu "22233344445555"

Vielen Dank im Voraus für Ihre Hilfe!

    
MattM 29.09.2010, 12:55
quelle

4 Antworten

18

Ich. XSLT 1.0-Lösung:

Diese Umwandlung :

%Vor%

bei Anwendung auf dieses XML-Dokument :

%Vor%

erzeugt das gewünschte, korrekte Ergebnis :

%Vor%

Erläuterung :

  1. Der Ausdruck: translate(.,'0123456789','') wird in einer Zeichenfolge ausgewertet, die alle nicht numerischen Zeichen im aktuellen Knoten enthält.

  2. Wir verwenden 1. oben im Ausdruck:

    translate (., translate (., '0123456789', ''), '')

und dies wird zu einer Zeichenfolge ausgewertet, bei der alle nicht numerischen Zeichen aus dem aktuellen Knoten gelöscht werden.

.3. Der Ausdruck: (substring($vnumsOnly,1,1)='1') +1)" wird zu 2 ausgewertet, wenn das erste Zeichen von $vnumsOnly '1' ist und es zu 1 ausgewertet wird, wenn das Anfangszeichen nicht '1' ist.

.4. Wir verwenden 3. im folgenden Ausdruck:

%Vor%

was zu der gleichen Zeichenkette $vnumsOnly führt, wenn sie nicht mit '1' beginnt und sie ihre Teilzeichenfolge beginnend mit dem zweiten Zeichen auswertet, wenn das erste Zeichen '1' ist.

II. XPath 2.0 Lösung:

Verwenden Sie einfach :

%Vor%

Die innere Ersetzung entfernt alle Zeichen, die nicht 0 bis 9 (Ziffern) sind. Die äußere Ersetzung entfernt die führende 1 (falls vorhanden).

    
Dimitre Novatchev 29.09.2010, 13:11
quelle
1

Dieses Stylesheet:

%Vor%

Mit dieser Eingabe:

%Vor%

Ausgabe:

%Vor%     
user357812 29.09.2010 13:07
quelle
1

ersetzen (ersetzen (., '[^ 1-9]', ''), '^ 1', '') - Ich antworte darauf ... Statt [^ 1-9] ... Verwenden Sie [^ 0-9], sonst werden alle 0 in der Telefonnummer gelöscht. Aber abgesehen davon hat dies mein Arbeitstag Integration Problem großartig gelöst!

    
Rob Alejandro 10.03.2016 21:05
quelle
0

Sie könnten verschachtelte ersetzen xpath-Funktionen verwenden. Der Insider würde die erste Ziffer in den Raum ändern, wenn sie 1 ist, würde der Außenseiter nicht mehr in den Raum wechseln.

    
Gábor Lipták 29.09.2010 13:09
quelle

Tags und Links