Abrufen einer Teilzeichenfolge NACH dem letzten Auftreten eines Zeichens in XSLT

7

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?

    
lysergic-acid 31.01.2012, 11:31
quelle

3 Antworten

19

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%     
Mads Hansen 31.01.2012, 11:58
quelle
1

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.

    
Dimitre Novatchev 31.01.2012 13:32
quelle
-1

Wenn Sie wissen, dass Sie genau zwei Punkte in Ihren Strings haben, können Sie versuchen:

%Vor%     
Igor Korkhov 31.01.2012 11:43
quelle

Tags und Links