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!
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 :
Der Ausdruck: translate(.,'0123456789','')
wird in einer Zeichenfolge ausgewertet, die alle nicht numerischen Zeichen im aktuellen Knoten enthält.
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).
Dieses Stylesheet:
%Vor%Mit dieser Eingabe:
%Vor%Ausgabe:
%Vor%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!
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.
Tags und Links transformation xslt