XSLT für jeden Buchstaben in einer Zeichenfolge

7

Ich schreibe eine XSLT-Transformation (für XSL-FO) und muss für jeden Buchstaben in einem String-Wert etwas wiederholen, zum Beispiel:

Wenn die Zeichenfolge in MyData/MyValue string gespeichert wird (z. B. MyData.MyValue="irgendwas"), brauche ich eine for-each wie diese:

%Vor%

Irgendwelche Ideen?

    
veljkoz 13.07.2011, 14:22
quelle

6 Antworten

10

Sie können eine Anrufvorlage verwenden und Parameter übergeben. Verwenden Sie dann die Rekursion, um die Vorlage aufzurufen, bis keine Zeichen mehr vorhanden sind.

Beispiel unten hinzugefügt.

auf diesem XML

%Vor%

und dieses xslt

%Vor%

Sie können dann in der if-Anweisung manipulieren, um weitere Dinge zu tun!

    
Treemonkey 13.07.2011, 14:35
quelle
7

Sie können diesen schmutzhässlichen Hack ausprobieren, der sich immer wieder bewährt hat:

%Vor%

Das funktioniert, wenn //* mehr Knoten als die Anzahl der Zeichen in deinem String entspricht ... Natürlich würde das auch eine komische Kommentarzeile für den armen Kerl bedeuten, der deinen Code danach liest ... ;-)

Hinweis : Ich weiß, dass es XSLT-Puristen gibt. Aber wenn Sie die Arbeit erledigen müssen und sich nicht viel um die Hyper-Ausführlichkeit von XSLT kümmern, dann sind diese Tricks manchmal großartig! IMO

Beachten Sie auch : Ich habe hier eine Leistungsfrage gestellt, um zu sehen, ob Iteration oder Rekursion besser abschneiden: XSLT-Iterations- oder Rekursionsleistung

    
Lukas Eder 13.07.2011 14:27
quelle
4

Ich bin mir nicht sicher über die Machbarkeit der Iteration. Sie können die Rekursion wie in anderen Antworten beschrieben offensiv verwenden. Dies ist mein Vorschlag (nicht viel anders als die anderen abgesehen von der Tatsache, dass ich Template-Match-Muster und nicht benannte Vorlagen verwende):

%Vor%     
Emiliano Poggi 13.07.2011 15:12
quelle
3

Sie können Rekursion verwenden:

%Vor%

Ausgabe: s o m e t h i n g 

    
Kirill Polishchuk 13.07.2011 14:36
quelle
3

Gute Frage, +1.

Dies ist die Vorlage / Funktion str-map von FXSL ist für :

%Vor%

Wenn diese Umwandlung auf ein beliebiges XML-Dokument angewendet wird (nicht verwendet), wird das gewünschte Ergebnis erzeugt:

%Vor%     
Dimitre Novatchev 03.12.2011 19:56
quelle
2

Mehrere XSLT 1.0-Lösungen wurden veröffentlicht (da das Original-Poster benötigt wurde). Zum Vergleich, hier ist, wie dies in XSLT 2.0 mit xsl: analyze-string getan werden konnte :

%Vor%     
Jukka Matilainen 13.07.2011 20:50
quelle

Tags und Links