XML - Grundlagen, Prinzipien und Anwendungen

Musterlösung Aufgabe 9

XSLT Denksportaufgaben


Die Lösungen für die Denksportaufgaben sind allesamt kurz. Wie immer gibt es sehr viele verschiedene Arten, die Probleme zu lösen.


Denksportaufgabe 1: Entattributisierer

Der Entattributisierer macht nichts anderes, als für beliebige Knotentypen den Knoten einfach zu kopieren (das geht am einfachsten mit der copy Anweisung), während eine weitere Template Rule dafür sorgt, dass dieses Verhalten für Attributknoten überschrieben wird und aus jedem Attribut eine Elementknoten mit generiertem Namen wird.

Der De-Entattributisierer erledigt, wie verlangt, die inverse Aufgabe. Der Test in der when Anweisung testet zum einen, ob es sich um einen Elementknoten handelt (self::*), und zum anderen, ob dessen Name mit dem generierten String (attribute-) beginnt. Falls ja, wird der Elementknoten in einen Attributknoten verwandelt, anderfalls wird der Knoten per copy kopiert.


Denksportaufgabe 2: Nachkommenszähler

In ähnlicher Weise wie der Entattributisierer funktioniert der Nachkommenszähler. Eine allgemeine Template Rule kopiert alle Knoten der copy, und falls der Knoten ein Element ist (self::*) und Kinderelemente hat (count(*) > 0), fügt die Fallunterscheidung noch das von der Aufgabe verlangte Attribut nachkommen ein.


Denksportaufgabe 3: Plattmacher

Der Plattmacher ist das komplizierteste Style Sheet, und weil man beim Plätten einfach alle Elemente durchgehen will in ihrer Dokumentenreihenfolge, kann man das sehr einfach in einer for-each Schleife machen. Dann braucht man noch ein Named Template, um den Namen zusammenzubauen, und dieses wird aus der Schleife heraus aufgerufen. Der Grossteil des Codes in diesem Fall ist allerdings gar nicht echte Codekomplexität, sondern einfach Syntax, weil besonders Definition und Aufruf parametrisierter Templates in XSLT sehr umständlichen Code ergibt.


please send comments to xml-vl@dret.net
last modification on Tuesday, 20-Jun-2006 14:55:32 CEST
valid CSS!valid XHTML 1.0!