Partager via


Élément <xsl:preserve-space>

Conserve les nœuds de texte contenant uniquement des espaces blancs qui peuvent apparaître dans les éléments spécifiés par l'attribut elements.

<xsl:preserve-space
  elements = tokens />

Attributs

  • elements
    Cet attribut est obligatoire. Sa valeur est une liste séparée par des espaces blancs de jetons de nom des nœuds où il faut préserver les nœuds de texte contenant uniquement des espaces blancs.

Informations sur l'élément

Nombre d'occurrences

Illimité

Éléments parents

xsl:stylesheet, xsl:transform

Éléments enfants

(Pas d'éléments enfants)

Notes

L'élément <xsl:preserve-space> conserve les nœuds de texte contenant uniquement des espaces blancs dans les éléments spécifiés. Il n'a pas d'effet sur les espaces blancs contenus dans des nœuds de texte où se trouvent à la fois des espaces blancs et d'autres caractères. Ici, la conservation des nœuds de texte contenant uniquement des espaces blancs signifie que les nœuds du document source seront conservés dans le document résultat. L'élément <xsl:strip-space> fait le contraire : il élimine les nœuds de texte contenant uniquement des espaces blancs dans les nœuds spécifiés.

Par défaut, tous les nœuds de texte contenant uniquement des espaces blancs sont conservés. Si le nom d'un élément correspond à un test de nom d'un élément <xsl:strip-space>, il est retiré de l'ensemble de noms d'éléments où les espaces blancs sont conservés. Si le nom d'un élément correspond à un test de nom d'un élément <xsl:preserve-space>, il est ajouté à la collection de noms d'éléments où les espaces blancs sont conservés.

Pour plus d'informations, voir la section 3.4 sur la suppression des espaces blancs de la Recommandation XSLT W3 sur www.w3.org/TR/xslt.

Exemple

L'exemple suivant illustre les effets de la conservation et de l'élimination des nœuds de texte contenant uniquement des espaces blancs à l'aide de <xsl:preserve-space> et <xsl:strip-space>.

Fichier XML (source.xml)

<?xml version="1.0"?>
<document>
<text>   </text>
<text>  ;</text>
<text>
This is a   sample text 
    
</text>
<code>   </code>
<code>  ;</code>
<code>
This is a   sample code 
    
</code>
</document>

Fichier XSLT (trans.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <!-- 
     The following xsl:preserve-space is not necessary.
     It is included to emphasize the fact that white-space-only
     text nodes are to be preserved on the <code> elements.
   -->
  <xsl:preserve-space elements="code"/>
  <xsl:strip-space elements="text"/>

  <xsl:template match="/">
    code elements:
    <xsl:apply-templates select="//code"/>

    text elements:
    <xsl:apply-templates select="//text"/>
  </xsl:template>

  <xsl:template match="text">
     text # <xsl:value-of select="position()"/>
     has <xsl:value-of select="count(text())"/> text(). 
     "<xsl:value-of select="translate(.,' &#10;&#13;&#9;', '-NRT')"/>"
  </xsl:template>
  

  <xsl:template match="code">
     code # <xsl:value-of select="position()"/>
     has <xsl:value-of select="count(text())"/> text(). 
     "<xsl:value-of select="translate(.,' &#10;&#13;&#9;', '-NRT')"/>"
  </xsl:template>

</xsl:stylesheet>

Essayez !

  1. Copiez le code ci-dessus et enregistrez-le dans les fichiers appropriés sur votre disque local.

  2. Lancez la transformation XSLT à l'aide de l'utilitaire de transformation en ligne de commande (msxsl.exe) à partir d'une invite de commande, comme suit :

    msxsl source.xml trans.xsl

    Important

    Ne lancez pas la transformation à partir d'Internet Explorer. Le navigateur effectue certaines opérations d'élimination des espaces non compatibles avec les spécifications XSLT. Par conséquent, la transformation XSLT peut sembler anormale.

Sortie

Voici les données en sortie standard :

code elements:

code # 1

has 1 text().

"---"

code # 2

has 1 text().

"--;"

code # 3

has 1 text().

"NThis-is-a-Tsample-codeTNTN"

text elements:

text # 1

has 0 text().

""

text # 2

has 1 text().

"--;"

text # 3

has 1 text().

"NThis-is-a-Tsample-textTNTN"

Notez que la transformation génère un nœud de texte pour le premier élément <code>, mais aucun pour le premier élément <text>. En effet, ces éléments comportent tous deux un nœud de texte contenant uniquement des espaces blancs conservé dans <code>, mais éliminé dans <text>, conformément aux instructions <xsl:preserve-space> et <xsl:strip-space> répertoriées au début de la feuille de style. Les deuxième et troisième éléments de chaque type indiquent que les nœuds de texte qui ne contiennent pas uniquement des espaces blancs ne sont pas concernés par ces instructions.

Voir aussi

Référence

Élément <xsl:strip-space>