Weg mit dem Leerraum: xsl:strip-space

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

Bei der Betrachtung des Verarbeitungsmodells wurde dargelegt, wann und warum Whitespace Nodes aus dem Quelldokument im Ergebnis auftauchen. Dies könnte natürlich dadurch abgestellt werden, dass man eine explizite Tem­plate-Regel für text() schreibt, die durch Überschreiben der Default-Regel das Kopieren unterbindet. Allerdings verhindert dies auch die elegante Methode, Textknoten indirekt über eine Sequenz von xsl:apply-templates zu verar­beiten.

Zum Glück gibt es eine bessere Methode in Form einer Deklaration, die Whitespace Nodes verwirft: xsl:strip-space. Auch diese Deklaration bringt man am Anfang des Stylesheets unter.

Zur Bestimmung derjenigen Elemente des Quelldokuments, innerhalb derer Weißraumzeichen entfernt werden sollen, dient das obligatorische Attribut ele­ments:

<xsl:strip-space elements="adresse"/>

Wie oben verwendet, entfernt die Deklaration Whitespace Nodes innerhalb von Elementen <adresse>, also auch innerhalb von Kindelementen dieses Ele­ments. Man kann auch mehrere Elementnamen übergeben. Dies geschieht mit einer durch Leerzeichen unterteilten Liste:

<xsl:strip-space elements="adresse name anschrift"/>

Anstatt womöglich alle in einem Dokument auftretenden Elemente auflisten zu müssen, kann man auch global für alle Elemente die Entfernung der Whitespace Nodes veranlassen. Es wird einfach der Wildcard-Bezeichner einge­setzt:

<xsl:strip-space elements="*"/>

Auf das Adressverzeichnis angewendet, verschwindet zwar die Vielzahl lästiger Umbrüche, aber auch »nützliche« Whitespace Nodes sind betroffen. Unbeab­sichtigt wurde auch der Whitespace zwischen den Informationen getilgt:

<?xml version="1.0" encoding="ISO-8859-1"?>
<html>
  <head>
    <title>Adressenliste</title>
  </head>
  <body>
    <h1>Adressenliste</h1>
    <p>Name: <b>PeterMustermann</b><br />Anschrift:
                       12345BeispielshausenWagenstr.5a
    </p>
    <hr />
    ...

Code-Beispiel: kap01/1.17.9/adressen.html.

An dieser Stelle können zweierlei Dinge unternommen werden: Entweder man ändert die Template-Regeln entsprechend, dass sie (mit xsl:text oder ähn­lich) die erforderlichen Leerzeichen ausgeben, oder man rudert wieder ein Stück zurück.

Letzteres könnte dadurch geschehen, dass man doch nicht den global wirken­den Wildcard-Bezeichner * in xsl:strip-space verwendet, sondern eine – allerdings unter Umständen etwas längliche – Liste expliziter Elementbezeich­ner. Davon sollte ursprünglich Abstand genommen werden. Ohnehin ist dies nicht so einfach, da sich das Whitespace-Stripping jeweils auf den gesamten Inhalt eines Elements bezieht. Zum Glück gibt es auch hier wieder eine Lösung.

   

<< 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