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, sondern 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 Erzeugung 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öglichkeit scheint eher der Vollständigkeit halber zu bestehen, als aus echter Notwendigkeit. Normalerweise werden Namensraumknoten während der Serialisierung im Rahmen des so genannten Namespace FixUp generiert, ohne dass hierauf Einfluss genommen werden muss.
Für Prozessanweisungen und Kommentarknoten ist dagegen die Notwendigkeit einer Konstruktion gegeben. Diese Knoten können, sofern sie im Ergebnisdokument auftreten sollen, nicht über den Weg eines Literal Result Elements dorthin kopiert werden. Literale Kommentare würden nicht kopiert, sondern ignoriert, Prozessanweisungen dagegen (vorzeitig) ausgeführt. Trotzdem 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 Kollektionen gebraucht werden, ist in XSLT eine Deklaration enthalten, die genau solche Attributsammlungen deklarieren kann: xsl:attribute-set. Die Deklaration 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.
- Elementknoten erzeugen mit xsl:element
- Attributknoten erzeugen mit xsl:attribute
- Sammlung von Attributdeklarationen – xsl:attribute-set
<< 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