Aktivist: Die Instruktion xsl:apply-templates
(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 1.)
Ganz von selbst passiert dies nicht: Hierfür ist eine eigene XSLT-Instruktion vorgesehen, die, wie ihr Name schon sagt, dazu dient, Template-Regeln zu aktivieren: xsl:apply-templates.
Jene Aktivierung erfolgt jedoch nicht direkt durch einen Aufruf (auch diese Möglichkeit besteht, allerdings mit einer anderen Instruktion. Anmerkung: Gemeint ist xsl:call-template, mit dem ein benanntes Template - xsl:template mit name-Attribut - aufgerufen werden kann. Dazu später mehr.), sondern indirekt, indem eine für das Template passende Sequenz aus den gewünschten Nodes zusammengestellt wird.
Hierfür besitzt xsl:apply-templates ein select-Attribut, in dem ein XPath-Ausdruck zur Beschreibung der gewünschten Auswahl dient. Auch dieser bezieht sich wieder auf den Kontext der aktuellen Template-Regel. Er muss also (hier vom Dokumentknoten ausgehend) lauten:
<xsl:apply-templates select="adressen/adresse"/>
Im Zusammenhang sieht dies so aus (der ursprünglich hier stehende <p>-Container wurde in die andere Template-Regel ausgelagert):
<!-- der Dokumentknoten bildet den Kontext: -->
<xsl:template match="/">
...
<h1>Adressenliste</h1>
<!-- hier wird die Sequenz erzeugt: -->
<xsl:apply-templates select="adressen/adresse"/>
...
</xsl:template>
Code-Beispiel: kap01/1.15.4/adressen.xsl (Auszug).
Die Instruktion wählt mittels eines Pfadausdrucks – in diesem Fall ausgehend vom Dokumentknoten – eine Sequenz aus Elementknoten <adresse> aus. Die Knoten sind in dieser Sequenz in Dokumentreihenfolge angeordnet und werden auch entsprechend zur Verarbeitung angeboten. Für jedes in der Sequenz befindliche Element <adresse> wird daher die Template-Regel mit dem passenden Vergleichsmuster einmal aktiviert.
Abbildung: Bildung einer Sequenz und ihre Reihenfolge.
Das Ergebnis (d1-adressen-ergebnis.html) sieht jetzt aus wie ursprünglich beabsichtigt. Der Stringwert jeder einzelnen Adresse steht in der Ergebnisseite in einem eigenen <p>-Container.
Um die Unterelemente, aus denen sich die Adresse zusammensetzt, auch einzeln zu behandeln, müssen nur entsprechende Templates bereitgestellt werden.
Nehmen wir an, jede Adresse soll in folgender Form formatiert werden:
Peter Mustermann
Wagenstr. 5.a, 12345 Beispielshausen
Der Name soll fett dargestellt werden und in einer eigenen Zeile stehen. Das ist simpel – einzig zu beachten ist, dass ein HTML-Break als LRE geschrieben den XML-Konventionen folgen muss, also <br/> geschrieben wird.
<!-- Template-Regel für <name>: -->
<xsl:template match="name">
<b><xsl:value-of select="."/></b><br/>
</xsl:template>
Code-Beispiel: kap01/1.15.4/adressen.xsl (Auszug).
Nicht vergessen: Es wird noch ein weiteres Template für die Ausgabe der Anschrift benötigt. Unter Ein Vergleich: Ausdruck vs. Instruktion wird dies den Anlass liefern, zwei unterschiedliche Ansätze für dessen Aufbau ausgiebig vorzustellen.
<< 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