XSLT ist eine Transformationssprache und keine Programmiersprache. Daher ist es auch nicht verwunderlich, dass es hier keine Laufvariablen gibt.
Dennoch gibt es Herausforderungen die nach der Verwendung von Variablen lechst. Also gilt es sich hier entsprechend anderwertig abzuhelfen:
position() ermöglicht den Zugriff auf die Position des aktuellen Elements.
count() ermöglicht das Herausfinden der Anzahl der verfügbaren Elemente.
So weit ist es auch nicht schwer anzuwenden. Doch was wenn Sie aufgrund der Hierarchie die Position des übergeordneten Elementes ermitteln möchten?
../position() funktioniert leider nicht so wie gewollt, da hier durch die eindeutige Hierarchie immer 0 zurück gegeben wird.
Das Problem wird mithilfe der “vorangegangenen Geschwister” gelöst:
count(../preceding-sibling::node()) + 1
- count = Zähle;
- ../ = navigiere zum Parent-Element;
- preceding-sibling = alle geschwister, welche in der Reihenfolge vorher gekommen sind;
- ::node() = die Knoten selektieren, sodass das Count auch durchgeführt werden kann.
Und schon ist die Position des Eltern-Elements ermittelt. Dies funktioniert übrigends auch mit Großeltern usw.
Fazit: Auch wenn keine prozedurale Implementierung möglich ist. Mithilfe so mancher eingebauten XPath Funktionen kann dennoch so manche Prozedurale Anforderung umgesetzt werden.