Ich habe eine Zeichenfolge in einer XML-Datei, die ähnlich aussieht:
M: Namespace.Class.Method (Etwas a, etwas b)
Die Anzahl der Zeichen für die Periode (.) ist leer, das heißt, sie kann wie in diesem Beispiel nur 2 sein, kann aber mehr sein.
Ich möchte XSLT verwenden, um einen Teilstring dieser Zeichenfolge vom letzten '.' Charakter, so dass ich nur verlassen werde mit:
Methode (Etwas a, Etwas b)
Ich konnte dies nicht mit den Standard-Teilzeichenfolgen / Teilzeichenfolge-Funktionen erreichen.
Gibt es einen einfachen Weg, dies zu tun?
In XSLT 1.0 müssen Sie eine rekursive Vorlage verwenden , wie folgt:
%Vor%und rufe es so auf:
%Vor%In XSLT 2.0 können Sie die Funktion tokenize () verwenden und wähle einfach das letzte Element in der Sequenz:
%Vor%Hier ist eine effizientere Lösung O (N) gegen O (N ^ 2) für die akzeptierte Antwort :
%Vor%Wenn diese Umwandlung auf das folgende XML-Dokument angewendet wird :
%Vor%das gewünschte, korrekte Ergebnis wird erzeugt :
%Vor%Erläuterung :
Diese Lösung enthält keinen Aufruf der Funktion substring-after()
. Stattdessen wird bei jedem Schritt nur das eine Zeichen der Zeichenkette auf Gleichheit mit dem Punktzeichen verglichen. Da es höchstens N Zeichen gibt, ist dies O (N) - lineare Komplexität.
Im Gegensatz dazu ruft die akzeptierte Antwort die Funktion substring-after()
bei jedem Schritt auf. Im schlimmsten Fall könnte es N Punkte geben und somit wäre dies O (N ^ N) - quadratische Komplexität.
Hinweis : Wir gehen von der Annahme aus, dass in beiden Lösungen das k-te Zeichen einer Zeichenfolge O (1) ist.
Wenn Sie wissen, dass Sie genau zwei Punkte in Ihren Strings haben, können Sie versuchen:
%Vor%