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í:
-
Elimina los espacios en blanco iniciales.
-
Invierta el resultado.
-
Elimina los espacios en blanco iniciales.
-
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')