strip-space et preserve-space


strip-space
Cette instruction permet de ne pas tenir compte des éléments textes du document XML source ne contenant que des "caractères blancs" (espaces, tabulations, retour-charriots).

Exemple :
XML    XSL
<book>
    <chapter>
        <title>Introduction</title>
        <content>.....</content>
    </chapter>
    <chapter>
        <title>First part</title>
        <content>.....</content>
    </chapter>
</book>
   <xsl:template match="chapter">
    <xsl:value-of select="position()"/> <xsl:value-of select="title"/>
</xsl:template>
Résultat :
2 - Introduction
4 - First part
La position du premier élément chapitre est 2, celle du second est 4. Le processeur considère en effet que l'élément book a 4 fils : un élément text composé d'un retour-charriot et d'une tabulation, le premier élément chapitre, un autre élément text identique au premier et le second élément chapitre.   
L'instruction strip-space permet de préciser, pour un type d'élément donné, d'ignorer les éléments text vides. C'est une instuction de premier niveau, i.e. elle doit être enfant direct de l'élément xsl:stylesheet.
En reprenant le même document XML en entrée, on obtient :
XSL    Résultat
<xsl:strip-space elements="book"/>

<xsl:template match="chapter">
    <xsl:value-of select="position()"/> <xsl:value-of select="title"/>
</xsl:template>
   1 - Introduction 
2 - First part
  

preserve-space
Il peut néanmoins être pertinent de conserver ces "blancs".
En reprenant un document XML de même nature en entrée, affichons pour chaque chapitre son titre numéroté et son contenu :
XML   
<book>
    <chapter>
        <title>Modes d'utilisation</title>
        <content>
            <p>Il existe 3 modes d'utilisation :</p>

            <p>En ligne de commande, bla bla bla...</p>
            <p>Les navigateurs bla bla bla.</p>
            <p>Les serveurs bla bla bla.</p>

            <p>En conclususion, blablabla.</p>
        </content>
    </chapter>
    <chapter>
        <title>Structure d'un document</title>
        <content>Un document XSLT est composé d'éléments XML, bla bla bla...</content>
    </chapter>
</book>
XSL    Résultat
<xsl:strip-space elements="*"/>

<xsl:template match="//chapter">
    <xsl:value-of select="position()"/> -
     <xsl:value-of select="title"/>
    <xsl:text>
    </xsl:text>
    <xsl:apply-templates select="content"/>
    <xsl:text>

    </xsl:text>
</xsl:template>

   1 - Modes d'utilisation
Il existe 3 modes d'utilisation :En ligne de commande, bla bla bla...Les navigateurs bla bla bla.Les serveurs bla bla bla.En conclususion, blablabla.

2 - Structure d'un document
Un document XSLT est composé d'éléments XML, bla bla bla...

Nous voyon ici que les retour à la ligne entre les paragraphes présents dans le document initial n'ont pas été reproduits en sortie. Nous avons en effet appliqué la directive strip-space à tous les éléments (elements="*"). Les "lignes vides" sont des noeuds de type text ne contenant que des "caractères blancs" et sont donc ignorés.
Il est possible d'indiquer au processeur de prendre en considération ces éléments via l'instruction opposée preserve-space :
XSL    Résultat
<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="content"/>

<xsl:template match="//chapter">
    <xsl:value-of select="position()"/> -
     <xsl:value-of select="title"/>
    <xsl:text>
    </xsl:text>
    <xsl:apply-templates select="content"/>
    <xsl:text>

    </xsl:text>
</xsl:template>

  

1 - Modes d'utilisation

Il existe 3 modes d'utilisation :

En ligne de commande, bla bla bla...
Les navigateurs bla bla bla.
Les serveurs bla bla bla.

En conclususion, blablabla.

2 - Structure d'un document
Un document XSLT est composé d'éléments XML, bla bla bla...

 

[ précédent ] sommaire... ] Suivant... ]