Compartir a través de


Elemento <xsl:preserve-space>

Conserva los nodos de texto con espacios en blanco únicamente que pueden aparecer en esos elementos, tal y como especifica el atributo elements.

<xsl:preserve-space
  elements = tokens />

Atributos

  • elementos
    Este atributo es necesario.El valor es una lista separada por espacios en blanco que contiene los símbolos de nombre de los nodos de los que debe conservarse los nodos de texto con espacios en blanco únicamente.

Información del elemento

Número de apariciones

Ilimitado

Elementos primarios

xsl:stylesheet, xsl:transform

Elementos secundarios

(No hay elementos secundarios)

Comentarios

El elemento <xsl:preserve-space> conserva los nodos de texto con espacios en blanco únicamente presentes en los elementos especificados.No tiene efecto sobre los caracteres de espacios en blanco presentes en los nodos de texto que contienen caracteres de espacios en blanco y caracteres que no son espacios en blanco.Aquí, la conservación de los nodos de texto con espacios en blanco únicamente significa que los nodos del documento de origen se mantendrán en el documento resultante.Por el contrario, <xsl:strip-space> elimina los nodos de texto con espacios en blanco únicamente presentes en los nodos especificados.

De forma predeterminada, se conservan todos los nodos de texto con espacios en blanco únicamente.Si el nombre de un elemento coincide con una comprobación de nombre de un elemento <xsl:strip-space>, se elimina del conjunto de nombres de elementos que conservan espacios en blanco.Si el nombre de un elemento coincide con una comprobación de nombre de un elemento <xsl:preserve-space>, se vuelve a añadir al conjunto de nombres de elementos que conservan espacios en blanco.

Para obtener más información, consulte "Whitespace Stripping", Sección 3.4 de la recomendación XSLT del W3 en www.w3.org/TR/xslt.

Ejemplo

En el siguiente ejemplo se ilustran los efectos de conservar y eliminar nodos de texto de sólo espacios en blanco mediante <xsl:preserve-space> y <xsl:strip-space>.

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

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

¡Inténtelo!

  1. Copie el código anterior y guárdelo en los archivos adecuados de la unidad local.

  2. Inicie la transformación XSLT, mediante la utilidad de línea de comandos de transformación (msxsl.exe) desde el símbolo del sistema, tal y como se indica a continuación:

    msxsl source.xml trans.xsl

    Importante

    No inicie la transformación desde Internet Explorer.El explorador realiza algunas operaciones de eliminación de espacios que no son compatibles con las especificaciones de XSLT, y podría provocar que la transformación XLST presentara un comportamiento incorrecto.

Resultados

Este es el resultado estándar:

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"

Observe que la transformación produce un nodo de texto para el primer elemento <code>, pero ningún nodo de texto para el primer elemento <text>.Esto se debe a que estos elementos tienen ambos un nodo de texto de solo espacios en blanco que se conserva en <code> pero se elimina en <text>, de acuerdo con las instrucciones <xsl:preserve-space> y <xsl:strip-space> mostradas al comienzo de la hoja de estilos.Los elementos segundo y tercero de cada clase muestran que esas instrucciones no afectan a los nodos de texto que no son de sólo espacios en blanco.

Vea también

Referencia

Elemento <xsl:strip-space>