Der strukturgesteuerte Ablauf der Verarbeitung

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 1.)

Jetzt wird klar, was genau während der Verarbeitung geschieht. Als Erstes wird die Regel für den Dokumentknoten aktiv. Diese stellt eine Sequenz zusammen, die lediglich aus dem Wurzelelement <adressen> besteht.

Der Kontext liegt somit auf dem Wurzelelement. Da für dieses Element keine Regel vorhanden ist, wird die Default-Regel für Elemente aktiv. Diese stellt ihrer­seits eine Sequenz der Kindknoten von <adressen> zusammen. Es handelt sich um die elf Elementknoten <adresse>. Zusätzlich werden aber auch die Whitespace Nodes vor, zwischen und nach den Elementen ausgewählt. Die Sequenz umfasst also 23 Knoten. Darin, dass die Default-Regel für Textknoten auch Whitespace Nodes verarbeitet, liegt der Grund, warum diese ins Ergebnis­dokument gelangen.

Auch für andere Elemente wurde »vergessen«, eigene Regeln zu definieren. Bei der Verarbeitung von <vorname> und <nachname> wird wieder die Default-Re­gel für Elemente bemüht.

Nirgendwo wurde eine bestimmte Sequenz forciert. Dennoch werden bei die­ser Verarbeitungsmethode keine Knoten des Baums übergangen. Die Regeln, nach denen sich die Verarbeitung vollzieht, folgen einer einfachen Iteration:

  • Regel 1:
    Wenn kein aktueller Knoten existiert, dann beginne am Dokument­knoten (des Eingangsdokuments).
    Dies ist am Anfang der Verarbeitung genau einmal der Fall, anschließend ist stets ein aktueller Knoten vorhanden, der verarbeitet wird.
  • Regel 2:
    Wenn der aktuelle Knoten Kindknoten besitzt, stelle eine Sequenz aus diesen zusammen und verarbeite diese der Reihe nach.
    Dies ist der Fall, wenn es sich beim aktuellen Knoten entweder um den Dokumentknoten oder einen Elementknoten handelt (und dieser nicht leer ist).
  • Regel 3:
    Hat der aktuelle Knoten keine Kindknoten, mache anschließend den nächsten Knoten der aktuellen Sequenz zum aktuellen Knoten.
    Dieser Fall taucht bei den Kindknoten von <adressen> auf. Der erste Kno­ten der Sequenz ist ein Whitespace Node. Dieser wird kopiert und anschlie­ßend wird der nächste Knoten der Sequenz verarbeitet, bei dem es sich um ein Element <adresse> handelt.
  • Regel 4:
    Ist der letzte Knoten einer Sequenz erreicht, so gehe zurück zum letzen aktuellen Knoten der vorherigen Sequenz und verarbeite den folgenden Knoten dieser Sequenz.
    Dies geschieht auf mehreren Stufen der Verarbeitung. Wird ein Knoten <adresse> verarbeitet, so wird die Sequenz seiner Kindknoten und die Sequenzen wiederum seiner Kindknoten verarbeitet, bevor der Fokus zum Knoten zurückkehrt und der nächste Knoten der Sequenz an der Reihe ist (hier ein Whitespace Node). Auf Grund dieser Regel wandert der Kontext­knoten schließlich zum Dokumentknoten zurück, womit die Verarbeitung beendet ist.

Attributknoten bleiben weiterhin außen vor

Dies funktioniert hervorragend, solange nur Elemente und Textknoten verar­beitet werden müssen. In den automatisch zusammengestellten Sequenzen befinden sich jedoch nie Attributknoten. Hierfür muss eine Sequenz gezielt auf der Attributachse zusammengestellt werden.

Das Default-Template für Attributknoten alleine nützt hier nichts – ebenso wenig wie der Default-Wert des select-Attributs von xsl:apply-templates. Zwar würde der Knotentest node() in Form von

<xsl:apply-templates select="node()"/>

theoretisch auch auf Attributknoten passen, nur befinden sich von diesen keine auf der betrachteten Child-Achse, denn node() ist ja nur Abkürzung des Ausdrucks child::node().

Sollen ohne Ausnahme alle Kindknoten und auch die Attribute eines Elements verarbei­tet werden, so kann dies, während das Element »Current Node« ist, mit folgen­dem Ausdruck veranlasst werden:

<xsl:apply-templates select="node() | @*"/>

Zu beachten ist, dass auch hier die Reihenfolge der alternativen Ausdrücke irre­levant ist. Jedoch: In einer so erstellten Sequenz stehen die Attributknoten stets zuerst. Normalerweise geht man so pauschal allerdings nicht vor. Attribute wird man eher einzeln und gezielt auslesen und dafür ebenso xsl:value-of einsetzen, wie dies im Default-Template der Fall ist. Im nächsten Kapitel werden Attribute auch in anderem Zusammen­hang eingesetzt, indem ihr Wert oder bloßes Vorhandensein zur Formulierung von Filterkriterien verwendet wird.

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn