XSL-Übersicht / xsl:for-each vs. xsl:apply-templates

xsl:for-each vs. xsl:apply-templates

xsl:for-each vs. xsl:apply-templates

➪ Grundsätzlich gibt es verschiedene Wege, in XSL Nodelists abzuarbeiten. Mit Blick auf eine effiziente Wartbarkeit des Programmcodes empfiehlt sich, die Entscheidung auch von der Struktur des XML-Dokuments abhängig zu machen. xsl:for-each, xsl:call-template und xsl:apply-templates bieten jeweils Vor- und Nachteile für unterschiedliche Aufgabenstellungen, mit unterschiedlichen Konsequenzen für den Maintenance-Aufwand.

In der Praxis werden sämtliche Ansätze parallel verwendet. Auch bei datensatzbasierten Strukturen, bei denen xsl:for-each eindeutig die bessere Wahl wäre, kommen tief verschachtelte xsl:apply-templates zum Einsatz. Und bei mixed content arbeitet sich mancher Developer mit xsl:for-each ab.

Der Ansatz xsl:apply-templates bringt jedoch eine schrittweise Auslagerung der Logik in diverse Templates mit sich, die sich dann häufig gegenseitig aufrufen. Die Notwendigkeit zu hoher Flexibilität mündet oft in einem Spaghetti-Code, der sich mit dem Hinweis auf die "Wiederverwendung von Quellcode" zwar rechtfertigen lässt, aber nicht darüber hinwegtäuschen kann, dass die Programmierung mit fortschreitender Komplexität immer schwerer wartbar wird.

Gewissermaßen wird also die hohe Flexibilität, die zur Verarbeitung gemischter Datenstrukturen erforderlich ist, mit einem Verlust an Übersichtlichkeit erkauft, der über gestiegene gegenseitige Abhängigkeiten dieser Subroutinen einen erhöhten Zeitaufwand an Wartung, Tests und Einarbeitung neuer Mitarbeiter nach sich zieht.

Die drei Ansätze treiben im unkontrollierten Mix mitunter erstaunliche Blüten. Die Anzahl der Templates/Functions, die sich gegenseitig aufrufen, gehen in die Tausende. In XSL 1.0 kommt es obendrein vor, dass die Auswahl der Code-Aufrufe nicht im Quelltext festgelegt ist, sondern erst zur Laufzeit erfolgt (Beispiel: <xsl:call-template name="{$vaufgerufenestemplate}">). Diese Art late binding erfordert zeitaufwendige Recherchen über die interne Funktionsweise.

Der Aufwand an die Wartung steigt:

Der hohe Grad an gegenseitigen Abhängigkeiten zieht häufig eine beträchtliche Kostenlawine nach sich, sodass man bestrebt sein sollte, diese Abhängigkeiten nachhaltig zu entflechten und auf ein Mindestmaß (im Idealfall auf Null) zu reduzieren. Wenn das nicht gelingt, dann ist es erfahrungsgemäß eine Frage der Zeit, bis die Controllingabteilung sich für zuständig hält und die Regie übernimmt.

wg / 5. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XSL_Auslagerung_Template.html