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:
Irgendwelche Ideen?
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!
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
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%Sie können Rekursion verwenden:
%Vor% Ausgabe:
s o m e t h i n g
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%