XSL-Übersicht / xsl:preserve-space, xsl:strip-space

xsl:preserve-space, xsl:strip-space

xsl:preserve-space, xsl:strip-space

xsl:strip-space und xsl:preserve-space erlauben eine unterschiedliche Behandlung bestehender Whitespaces zwischen den Elementen des XML-Input-Dokuments.

xsl:strip-space definiert jene Elemente, deren Whitespaces entfernt werden sollen. xsl:preserve-space definiert dagegen jene Elemente, deren Whitespaces beibehalten werden sollen. xsl:preserve-space ist die Default-Einstellung, daher macht seine Deklaration nur dann Sinn, wenn xsl:strip-space aktiviert ist und eine unterschiedliche Behandlung der Whitespaces angestrebt wird.

Nehmen Sie als Beispiel dieses XML-Dokument, das bewusst diverse Whitespaces aufweist.


<ZUTATEN>
    <item>5 XML-Dateien</item>
             <item 
                 >1 XML-Schema</item>
    <item>
        3 XSL-Stylesheets
    </item> <item>3 Schematron zum Testen</item>
        <item>1 Party zum Feiern</item>
     </ZUTATEN>

Die folgenden Templates arbeiten mit der unveränderten Behandlung der Whitespaces (das Element xsl:preserve-space elements="*" ist überflüssig, da Default) ...


<xsl:preserve-space elements="*"/>
<xsl:template match="ZUTATEN">
    <p>
        <b>ZUTATEN:</b>
        <xsl:apply-templates/>
    </p>
</xsl:template>
<xsl:template match="item">
    <Zutat>
        <xsl:apply-templates/>
    </Zutat>
</xsl:template>
<xsl:template match="item[position() = last()]">
    <zum_Schluss>
        <xsl:apply-templates/>
    </zum_Schluss>
</xsl:template>
<xsl:template match="text()">
    <t>
        <xsl:value-of select="."/>
    </t>
</xsl:template>

... und zaubern ein Ergebnis auf den Monitor. Besonders an den Inhalten von <t> ... </t> erkennen Sie, wie der XSL-Prozessor die Whitespaces verarbeitet hat.


<p>
   <b>ZUTATEN:</b>
   <t>
    </t>
   <Zutat>
      <t>5 XML-Dateien</t>
   </Zutat>
   <t>
             </t>
   <Zutat>
      <t>1 XML-Schema</t>
   </Zutat>
   <t>
    </t>
   <Zutat>
      <t>
        3 XSL-Stylesheets
    </t>
   </Zutat>
   <t> </t>
   <Zutat>
      <t>3 Schematron zum Testen</t>
   </Zutat>
   <t>
        </t>
   <zum_Schluss>
      <t>1 Party zum Feiern</t>
   </zum_Schluss>
   <t>
     </t></p>

Ganz anders sieht das Result mit xsl:strip-space aus:


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

Hier tauchen die Textelemente <t> ... </t> der Whitespaces erst gar nicht auf. Freilich, wenn ein Element führende oder schließende Spaces beinhaltet, wird das auch mit ausgegeben. Hier können Sie mit eingreifen.


<?xml version="1.0" encoding="UTF-8"?>
<p>
   <b>ZUTATEN:</b>
   <Zutat>
      <t>5 XML-Dateien</t>
   </Zutat>
   <Zutat>
      <t>1 XML-Schema</t>
   </Zutat>
   <Zutat>
      <t>
        3 XSL-Stylesheets
    </t>
   </Zutat>
   <Zutat>
      <t>3 Schematron zum Testen</t>
   </Zutat>
   <zum_Schluss>
      <t>1 Party zum Feiern</t>
   </zum_Schluss>
</p>

Vergessen Sie nicht, dass Sie mit und dessen indent-Attribut die Ausgabe steuern können: Hier werden entweder Whitespaces in den Output geschrieben (indent="yes") oder nicht (indent="no").


<xsl:output method="xml" indent="yes" />

wg / 13. April 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/xsl_preserve_space.html