Havarie: Die Grenzen des Stringwertes

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

Zunächst soll – angelehnt an das im vorigen Beispiel erfolgreiche Prinzip – ver­sucht werden, die Adressen in folgender Form auszulesen:

<!-- der Dokumentknoten bildet den Kontext: -->
<xsl:template match="/">
  ...
  <h1>Adressenliste</h1>
  <!-- dies funktioniert nicht wie gewünscht: -->
  <p><xsl:value-of select="adressen/adresse"/></p>
  ...
</xsl:template>

Code-Beispiel: kap01/1.15.2/adressen.xsl (Auszug).

Hier ergibt sich sofort ein Problem: Das Ergebnis hat nicht die gewollte Form. Es werden zwar in der Tat alle Elemente <adresse> ausgewählt, jedoch erscheinen diese alle gemeinsam in einem <p>-Container. (Achtung: In XSLT 1.0 erhielte man nur den Stringwert des ersten <adresse>-Elements. Hier existiert ein Unterschied in der Wirkung von xsl:value-of.)

alle Adressen werden gleichzeitig ausgegeben

Abbildung: Alle Adressen werden gleichzeitig ausgegeben.

De facto wird eine Sequenz der jeweiligen Stringwerte der Einzeladressen erzeugt. Leider nützt dies unmittelbar nichts (das Verhalten von xsl:value-of in Bezug auf Sequenzen ist jedoch Thema auf den nächsten Seiten). Die String­werte der Einzelelemente verschmelzen im Ergebnisdokument zu einem einzi­gen Textknoten. Eigentlich soll aber jede einzelne Adresse separat verarbeitet 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