Schleifen

Wie in den vorherigen Abschnitten gezeigt, können Inhalte des Quelldokuments über das <xsl:apply-templates>-Element in das Zieldokument kopiert werden. Häufig sollen aber nur bestimmte Elemente aus dem Quelldokument kopiert werden. In diesen Fällen bietet sich die Verwendung des <xsl:for-each>-Elements an, beispielsweise für die Erstellung von Inhaltsverzeichnissen. Im folgenden Beispiel werden wir ein solches generieren.

Das Stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="iso-8859-1" version="1.0"/>
  <xsl:template match="Gedichtsammlung">
    <html>
        <body>
            <h2>Inhaltsverzeichnis</h2>
            <xsl:for-each select="Gedicht">             (1)
                <a>
                   <xsl:attribute name="href">#<xsl:value-of select="@Erscheinungsjahr"/>
                   </xsl:attribute>                     (2)
                   <xsl:value-of select="Titel"/>
                </a>
                <br/>
            </xsl:for-each>
            <xsl:apply-templates/>
        </body>
     </html>
  </xsl:template>
  <xsl:template match="Autor">
      <br/>
      <h4>
          <xsl:apply-templates/>
      </h4>
  </xsl:template>
  <xsl:template match="Vorname">
           <xsl:apply-templates/>
           <xsl:text> </xsl:text>
  </xsl:template>
  <xsl:template match="Nachname">
           <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="Titel">
      <h2>
          <a>
             <xsl:attribute name="name">             (3)
             <xsl:value-of select="parent::Gedicht/@Erscheinungsjahr"/>
             </xsl:attribute>
          </a>
          <xsl:apply-templates/>
      </h2>
  </xsl:template>
  <xsl:template match="Strophe">
      <p>
         <xsl:apply-templates/>
      </p>
  </xsl:template>
  <xsl:template match="Vers">
        <xsl:apply-templates/>
        <br/>
  </xsl:template>
</xsl:stylesheet>

(1) Das Element <xsl:for-each> erzeugt eine Schleife. Bei jedem zutreffenden Ausdruck des select-Attributs wird ein Durchlauf erzeugt. Schleifen stellen in der Praxis eine Möglichkeit dar, um Auswahlen zu treffen. Häufig kommen sie bei Inhaltsverzeichnissen und Registern zum Einsatz, in denen bestimmte Informationen aus dem gesamten Dokument gesammelt werden müssen und neu strukturiert werden sollen.

(2) An dieser Stelle wird die Schleife benutzt, um alle Gedichttitel anzuzeigen und einen internen Verweis auf diese an der entsprechenden Stelle im Dokument zu erzeugen. Das Element <xsl:attribute> erzeugt dabei Attribute im Elternelement, hier für das Element <a>. Das obligatorische Attribut name gibt dem Attribut im Zieldokument seinen Namen, hier also das href-Attribut, das in HTML das Ziel des Links festlegt. Der Inhalt des <xsl:attribute>-Elements wird im Zieldokument zum Wert des href-Attributs. Das #-Zeichen wird in HTML genutzt, um auf einen Anker zu verweisen, der sich im selben Dokument befindet. Der Name des Ankers wird hier über das Erscheinungsjahr, also dem Inhalt des Erscheinungsjahr-Attributes, festgelegt.

(3) Das an dieser Stelle angewendete Prinzip entspricht der oben erläuterten Vorgehensweise. An dieser Stelle werden die benötigten Anker erzeugt. Auch hier kommt das HTML-Element <a> zum Einsatz.

Das Zieldokument:

<html>
    <body>
        <h2>Inhaltsverzeichnis</h2>
        <a href="#1905">Der Panther</a>                (2)
        <br />
        <a href="#1799">Zauberlehrling</a>             (2)
        <br />
        <a href="#1945">Moritat von Mackie Messer</a>  (2)
        <br />
        <a href="#1890">Pst!</a>                       (2)
        <br />
        <a href="#-750">Ιλιάδα</a>                     (2)
        <br />
        <br />
        <h4>Rainer Maria Rilke</h4>
        <h2>
            <a name="1905" />Der Panther</h2>Im Jardin des Plantes, Paris <p>Sein Blick ist vom Vorübergehn der Stäbe<br />so müd geworden, daß er nichts mehr ält.<br />Ihm ist, als ob es tausend Stäbe gäbe<br />und hinter tausend Stäben keine Welt.<br />             (3)
        </p>
...

Browser-Ansicht des Zieldokumentes:

Browser-Ansicht: Beispiel - for-each

<< zurück vor >>

 

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

Copyright © dpunkt.verlag GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSL-FO in der Praxis" 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.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, fon 06221-14830, fax 06221-148399, hallo(at)dpunkt.de