Saltar al contenido

XSLT: elimina los espacios en blanco de la plantilla

La guía o código que verás en este post es la solución más rápida y efectiva que encontramos a tu duda o problema.

Solución:

En XSLT, los espacios en blanco se conservan de forma predeterminada, ya que pueden ser datos relevantes.

La mejor manera de evitar espacios en blanco no deseados en la salida es no crearlos en primer lugar. no hagas:


  foo

porque eso es "n··foon", desde el punto de vista del procesador. más bien hazlo


  foo

Los espacios en blanco en la hoja de estilo se ignoran siempre que aparezcan solo entre elementos XML. En pocas palabras: nunca use texto “desnudo” en ninguna parte de su código XSLT, siempre enciérrelo en un elemento.

Además, usando un inespecífico:


es problemático, porque la regla XSLT predeterminada para los nodos de texto dice “cópielos en la salida”. Esto también se aplica a los nodos de “solo espacios en blanco”. Por ejemplo:


   value 

contiene tres nodos de texto:

  1. "n··" (justo después de )
  2. "·value·"
  3. n" (justo antes de )

Para evitar que el n.° 1 y el n.° 3 se cuelen en la salida (que es la razón más común de los espacios no deseados), puede anular la regla predeterminada para los nodos de texto declarando una plantilla vacía:


Todos los nodos de texto ahora están silenciados y la salida de texto debe crearse explícitamente:


Para eliminar los espacios en blanco de un valor, puede usar el normalize-space() Función XSLT:


Pero cuidado, ya que la función normaliza cualquier espacio en blanco que se encuentre en el stringp.ej "·value··1·" se convertiría "value·1".

Adicionalmente puedes usar el y elementos, aunque por lo general esto no es necesario (y personalmente, prefiero el manejo explícito de espacios en blanco como se indicó anteriormente).

Por defecto, las plantillas XSLT tienen set, que mantendrá espacios en blanco en su salida. Puedes añadir para indicarle dónde eliminar los espacios en blanco.

Es posible que también deba incluir una directiva de espacio de normalización, así:

 

Aquí hay un ejemplo para preservar/quitar espacio de W3 Schools.

En cuanto a eliminar pestañas pero manteniendo líneas separadas, probé el siguiente enfoque XSLT 1.0 y funciona bastante bien. Su uso de la versión 1.0 o 2.0 depende en gran medida de la plataforma que esté utilizando. Parece que la tecnología .NET aún depende de XSLT 1.0 y, por lo tanto, está limitado a plantillas extremadamente desordenadas (consulte a continuación). Si está utilizando Java o algo más, consulte el enfoque mucho más limpio XSLT 2.0 que se encuentra en la parte inferior.

Estos ejemplos están destinados a ser ampliados por usted para satisfacer sus necesidades específicas. Estoy usando pestañas aquí como ejemplo, pero esto debería ser lo suficientemente genérico como para ser extensible.

XML:



        adslfjksdaf

                dsalkfjdsaflkj

            lkasdfjlsdkfaj

…y la plantilla XSLT 1.0 (requerido si usa .NET):


   
 
   
   
   
   
    
       
       
       
         
         
         
       
    
    
      
    
   
                  
  
   
     
     
     
       
  

XSLT 2.0 hace que esto sea trivial con el replace función:



 
  
 

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *