Saltar al contenido

¿Cómo recortar en xslt?

Solución:

normalize-space(Datas/Data[@key='Name']/string) podría ser suficiente, recortará los espacios en blanco y el inicio y el final. Sin embargo, también colapsa cualquier espacio en blanco en el medio en un solo espacio, no sé si quieres eso.

La forma más sencilla es utilizar el trim función de plantilla de FXSL.

Esta transformación:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="https://foroayuda.es/trim.xsl"/>
<xsl:output method="text"/>

  <xsl:template match="https://foroayuda.es/">
    '<xsl:call-template name="trim">
        <xsl:with-param name="pStr" select="string(/*)"/>
    </xsl:call-template>'
  </xsl:template>
</xsl:stylesheet>

cuando se aplica en este documento XML:

<someText>

   This is    some text   

</someText>

produce el resultado deseado y correcto:

'This is    some text'

Cómo trim obras:

Es fácil eliminar todos los espacios en blanco iniciales de una cadena, pero la parte difícil es eliminar todos los espacios en blanco finales.

Los FXSL trim function / template logra esto usando otra plantilla / función de FXSL para invertir una cadena.

Entonces, el procesamiento es así:

  1. Elimina los espacios en blanco iniciales.

  2. Invierta el resultado.

  3. Elimina los espacios en blanco iniciales.

  4. Finalmente revertir.

El código completo para trim() en FXSL 2.0 (para XSLT 2.0) se puede ver aquí. Es casi el mismo que el código de la trim plantilla de FXSL 1.0 (para XSLT 1.0).

Ofreciendo otra solución que utilizo en XSLT 2.0 ya que es más concisa y precisa (normalizar el espacio no es un recorte).

Utilice la función de reemplazo y una expresión regular para tomar el contenido interno menos el espacio en blanco anterior y posterior.

replace(Datas/Data[@key='Name']/string,'^s*(.+?)s*$', '$1')
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

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