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 akti­vieren: 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 indi­rekt, 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>-Con­tainer 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.

Bildung einer Sequenz und ihre Reihenfolge

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 ein­zeln zu behandeln, müssen nur entsprechende Templates bereitgestellt wer­den.

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 unter­schiedliche 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