Condividi tramite


Elemento <xsl:preserve-space>

Conserva i nodi di tipo text con soli spazi vuoti che possono essere visualizzati negli elementi come specificato dall'attributo elements.

<xsl:preserve-space
  elements = tokens />

Attributi

  • elements
    Questo attributo è obbligatorio. Il valore è un elenco di token del nome, separato da spazi vuoti, relativo ai nodi di cui è necessario conservare i nodi di tipo text con soli spazi vuoti.

Informazioni sull'elemento

Numero di occorrenze

Illimitato

Elementi padre

xsl:stylesheet, xsl:transform

Elementi figlio

(Nessun elemento figlio)

Note

L'elemento <xsl:preserve-space> conserva i nodi di tipo text con soli spazi vuoti negli elementi specificati. Non ha alcun effetto sui caratteri di spazio vuoto nei nodi di tipo text con caratteri sia di spazio vuoto che non di spazio vuoto. In questo caso la conservazione di nodi di tipo text con soli spazi vuoti significa che i nodi dal documento di origine verranno conservati nel documento risultante. L'elemento <xsl:strip-space> esegue la funzione opposta: estrae i nodi di tipo text con soli spazi vuoti dai nodi specificati.

Per impostazione predefinita, vengono conservati tutti i nodi di tipo text con soli spazi vuoti. Se un nome di elemento corrisponde a una verifica del nome in un elemento <xsl:strip-space>, viene rimosso dall'insieme di nomi di elemento che conservano gli spazi vuoti. Se un nome di elemento corrisponde a una verifica del nome in un elemento <xsl:preserve-space>, viene nuovamente aggiunto all'insieme di nomi di elemento che conservano gli spazi vuoti.

Per altre informazioni, vedere la sezione 3.4, "Whitespace Stripping", della raccomandazione W3C relativa a XSLT all'indirizzo www.w3.org/TR/xslt (informazioni in lingua inglese).

Esempio

Nell'esempio seguente vengono illustrati gli effetti della conservazione e della rimozione dei nodi di tipo text con soli spazi vuoti usando <xsl:preserve-space> e <xsl:strip-space>.

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

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

Prova

  1. Copiare il codice riportato sopra e salvarlo nei file appropriati nell'unità locale.

  2. Avviare la trasformazione XSLT usando l'utilità di trasformazione della riga di comando (msxsl.exe) dal prompt dei comandi, come indicato di seguito:

    msxsl source.xml trans.xsl

    Importante

    Non avviare la trasformazione da Internet Explorer.Il browser esegue alcune operazioni di rimozione degli spazi che non sono compatibili con le specifiche XSLT.Pertanto è possibile che la trasformazione XLST non sia corretta.

Output

Questo è l'output 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"

Notare che la trasformazione restituisce un nodo di tipo text per il primo elemento <code>, ma nessun nodo di tipo text per il primo elemento <text>. Questo si verifica perché questi elementi dispongono di un nodo di tipo text con soli spazi vuoti che viene conservato in <code> ma rimosso in <text>, in base alle istruzioni <xsl:preserve-space> e <xsl:strip-space> elencate all'inizio del foglio di stile. Dal secondo e dal terzo elemento di ciascun tipo risulta che queste istruzioni non incidono sui nodi di tipo text che non presentano solo spazi vuoti.

Vedere anche

Riferimenti

Elemento <xsl:strip-space>