Erzeugung von Knoten

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

Mittels der Attributwert-Templates ist zumindest für die Attribute von Literal Result Elements eine gewisse Flexibilität eingetreten. Bei den entsprechenden Elementen ist dies nicht der Fall. Nach wie vor können sie nur unverändert übernommen werden. Ein Pluspunkt ist die Einfachheit dieser Methode. Ideal ist sie hingegen auch hier nur, solange klar ist, was zur Laufzeit benötigt wird.

Wann Literal Result Elements nicht ausreichen

Krass überfordert sind Literal Result Elements, wenn ihre Bezeichner nicht im Vorfeld bekannt sind. Einen Element- oder Attributbezeichner (oder gar beides gleichzeitig) in Anlehnung an Attributwert-Templates dynamisch zu erzeugen, scheitert an Syntaxproblemen.

Folgendes ist zwar ein interessanter Ansatz, aber verboten:

<{elementname} {attributname}="{attributwert}"/>

Auf der Tag-Ebene können XPath-Ausdrücke nicht ausgewertet werden, son­dern nur innerhalb von Attributwerten. Da die Funktionalität aber durchaus sinnvoll ist, wird sie durch spezielle XSLT-Instruktionen abgedeckt, die allein zur Konstruktion von Knoten dienen.

XSLT-Instruktionen zur Knotenerzeugung

Für alle sieben Knotengattungen steht in XSLT 2.0 eine Instruktion zur Erzeu­gung eines entsprechenden Knotens zur Verfügung.

Zu nennen ist hierbei zum Erzeugen von

  • Attributen: xsl:attribute
  • Elementen: xsl:element
  • Dokumentknoten: xsl:document
  • Textknoten: xsl:value-of
  • Kommentaren: xsl:comment
  • Prozessanweisungen: xsl:processing-instruction
  • Namensraumknoten: xsl:namespace.

Besonders interessant sind an dieser Stelle die Erzeugung von Element- und Attributknoten. Hier geht es insbesondere um die dynamische Erzeugung des Bezeichners des konstruierten Knotens.

Die explizite Erzeugung von Dokumentknoten mit xsl:document spielt im Zusammenhang mit Variablen und der Validierung ihres Werts zum Zeitpunkt ihrer Erzeugung eine Rolle. Sie muss hier nicht behandelt werden.

Vergleichbar speziell ist die Erzeugung von Namensraumknoten. Diese Mög­lichkeit scheint eher der Vollständigkeit halber zu bestehen, als aus echter Not­wendigkeit. Normalerweise werden Namensraumknoten während der Seriali­sierung im Rahmen des so genannten Namespace FixUp generiert, ohne dass hierauf Einfluss genommen werden muss.

Für Prozessanweisungen und Kommentarknoten ist dagegen die Notwen­digkeit einer Konstruktion gegeben. Diese Knoten können, sofern sie im Ergeb­nisdokument auftreten sollen, nicht über den Weg eines Literal Result Ele­ments dorthin kopiert werden. Literale Kommentare würden nicht kopiert, sondern ignoriert, Prozessanweisungen dagegen (vorzeitig) ausgeführt. Trotz­dem werden diese Instruktionen vergleichsweise selten benötigt.

Textknoten werden offiziell durch xsl:value-of erzeugt. Dies soll hier nur deshalb erwähnt werden, da die entsprechend benannte Instruktion xsl:text eben genau dies nicht im betrachteten Umfang tut, denn hierfür fehlt ihr die Möglichkeit, XPath-Ausdrücke auszuwerten, mit anderen Worten: das select-Attribut. Sie kann nur bereits literal vorhandene Textknoten schützen.

Da Attribute oft nicht einzeln, sondern in aufeinander abgestimmten Kollekti­onen gebraucht werden, ist in XSLT eine Deklaration enthalten, die genau sol­che Attributsammlungen deklarieren kann: xsl:attribute-set. Die Dekla­ration erzeugt jedoch nicht selbst Attributknoten, sondern dient nur als Hülle für die entsprechenden Attributdefinitionen.

Bevor hierauf näher eingegangen wird, soll aber zunächst die Erzeugung von Element- und Attributknoten umrissen werden.

   

   

<< 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