Nennen Sie es einfach rekursiv; gib eine Registerkarte aus und rufe die gleiche Vorlage erneut mit n-1 an, wenn n & gt; 1.
%Vor%Wie bereits erwähnt, gibt dieses Beispiel tatsächlich mindestens eins aus. In meiner Erfahrung, wo die Ausgabe Whitespace ist, wird es normalerweise benötigt. Sie können das Prinzip einer rekursiven Vorlage so anpassen, wie Sie es für richtig halten.
In XSLT 2.0:
%Vor%(Leider habe ich den Verdacht, dass Sie die Frage nicht stellen müssten, wenn Sie XSLT 2.0 verwenden würden.)
Eine andere Technik, die oft mit XSLT 1.0 verwendet wird, ist der Hack:
%Vor%funktioniert, vorausgesetzt die Anzahl der Elemente in Ihrem Quelldokument ist größer als die Anzahl der Tab-Zeichen, die Sie ausgeben möchten.
Dies scheint mir die einfachste und flexibelste zu sein.
Für XSLT 1.0 (oder vielleicht 1.1).
%Vor%Natürlich ist die Variable count , wo Sie Ihren n Parameter zuweisen.
Ich habe die Variable repeat verwendet, um das Tab Zeichen zu halten, aber Sie könnten einfach das $ repeat durch das Tab-Zeichen in einfachen Anführungszeichen ersetzen im Sequenzelement. Hinweis: Diese Variable kann eine Länge größer als 1 haben, was eine ganze Reihe von Möglichkeiten schafft.
Es wird keine Rekursion verwendet, so dass es nicht zu einer Rekursionsgrenze kommt.
Ich kenne nicht den Maximalwert, den Sie für die Zählung verwenden können, aber ich habe es bis 10.000 getestet.
Ich habe eine LGPL-lizensierte Bibliothek namens functx entdeckt, da ich sicher war, dass jemand das schon getan hat ... Dies ist eine XSLT-Bibliothek vom Typ "Standard Library", die eine Funktion namens RepeatX enthält. Zeichenfolge. Aus der Dokumentation:
Die Funktion functx: repeat-string gibt eine Zeichenfolge zurück, die aus einer gegebenen Anzahl von Kopien von $ stringToRepeat besteht, die miteinander verkettet sind.
Wo ich es so in meinem Code verwende:
%Vor%Wenn Sie also ein Tab-Zeichen n mal drucken möchten, rufen Sie es wie folgt auf:
%Vor%Ich weiß, dass diese Frage alt ist, aber ich hoffe, das kann noch jemandem helfen.
Tags und Links xslt