La función normalize-space
quita el espacio en blanco inicial y final y reemplaza las secuencias de caracteres en espacios en blanco por un espacio simple. ¿Cómo puedo solo reemplaza las secuencias de caracteres en espacios en blanco por un espacio simple en XSLT 1.0? Por ejemplo, "..x.y...\n\t..z."
(espacios reemplazados por un punto para facilitar la lectura) debe convertirse en ".x.y.z."
.¿Cómo puedo reemplazar secuencias de espacios en blanco por un espacio pero no recortar en XSLT?
Respuesta
Sin método de Becker, se podría utilizar un poco de discouraged carácter de marca:
translate(normalize-space(concat('',.,'')),'','')
Nota: función de tres llamadas ...
O con cualquier carácter pero repite alguna expresión:
substring(
normalize-space(concat('.',.,'.')),
2,
string-length(normalize-space(concat('.',.,'.'))) - 2
)
En XSLT se puede declarar una variable fácilmente:
<xsl:variable name="vNormalize" select="normalize-space(concat('.',.,'.'))"/>
<xsl:value-of select="susbtring($vNormalize,2,string-length($vNormalize)-2)"/>
Gracias, el uso de personajes desalentados es un truco ingenioso. Solo olvidaste el ';' después de cada entidad de personaje (o se perdió al editar). – Jakob
@Jakob: De nada. También tienes razón: he olvidado el último ';' en entidades. Lo siento. –
Utilice esta XPath 1.0 expresión:
concat(substring(' ', 1 + not(substring(.,1,1)=' ')),
normalize-space(),
substring(' ', 1 + not(substring(., string-length(.)) = ' '))
)
Para verificar esto, la siguiente transformación:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select=
"concat(substring(' ', 1 + not(substring(.,1,1)=' ')),
normalize-space(),
substring(' ', 1 + not(substring(., string-length(.)) = ' '))
)
"/>
</xsl:template>
</xsl:stylesheet>
cuando se aplica en este documento XML:
<t>
<t1> xxx yyy zzz </t1>
<t2>xxx yyy zzz</t2>
<t3> xxx yyy zzz</t3>
<t4>xxx yyy zzz </t4>
</t>
produce el, resultado correcto deseada:
<t>
<t1> xxx yyy zzz </t1>
<t2>xxx yyy zzz</t2>
<t3> xxx yyy zzz</t3>
<t4>xxx yyy zzz </t4>
</t>
+1 para una solución correcta. – Flack
Gracias! Usaré el método de Alejandro aunque confíe en datos que no contengan un carácter especial. Ambas respuestas son útiles :-) – Jakob
@Jacob: De nada. Supongo que eligió la respuesta de @ Alejandro porque dividió la expresión en variables y así lo hizo más comprensible. Usted debe saber que entre nosotros nos enorgullece proporcionar soluciones XPath de una sola línea :) –
- 1. Cómo recortar espacios en blanco entre caracteres
- 2. JSF recortar espacios en blanco
- 3. ¿Cómo puedo reemplazar múltiples espacios en blanco con un solo espacio en Perl?
- 4. Recortar espacios en blanco unicode en PHP 5.2
- 5. Como reemplazar múltiples espacios en blanco con un espacio en blanco
- 6. división por espacios en blanco o múltiples espacios en blanco
- 7. ¿Por qué el espacio non-breaking no es un carácter de espacio en blanco en java?
- 8. ¿Cómo recortar los espacios en blanco finales de una cuerda?
- 9. Recortar el espacio en blanco líder con PHP?
- 10. vim regex reemplazar múltiples espacios consecutivos con un solo espacio
- 11. Reemplazar espacios pero no cuando entre paréntesis
- 12. ¿Cómo puedo reemplazar el espacio en blanco en el nombre de archivo del archivo cargado
- 13. MySQL reemplazar todos los espacios en blanco con -
- 14. recortar el espacio en blanco de una cadena?
- 15. ¿Cómo puedo eliminar el espacio en blanco de los parámetros de solicitud en Spring MVC
- 16. ¿Cómo puedo recortar el espacio en blanco de una variable en awk?
- 17. Método SQL para reemplazar espacios en blanco repetidos con espacios en blanco únicos
- 18. Sustituto espacios en blanco múltiple con un solo espacio en blanco en Python
- 19. Objective-C - Reemplazar secuencias de nueva línea con un espacio
- 20. PHP - detectar espacios en blanco entre cadenas
- 21. Preservar espacios en blanco de atributos
- 22. Cómo recortar el espacio en blanco final en Visual Studio 2012?
- 23. ¿Cómo elimino hasta espacios no en blanco en vim?
- 24. Intentando reemplazar todo el espacio en blanco con un solo espacio
- 25. Expresión regular que permite espacios en una cadena, pero no solo espacios en blanco
- 26. Reemplazar espacios en blanco con una coma en un archivo de texto en Linux
- 27. ¿Cómo recortar correctamente los espacios en blanco de una cadena en Java?
- 28. ¿Cómo puedo reemplazar {0} pero no {{0}}?
- 29. Recortar/recortar un archivo JPG con espacio vacío con Java
- 30. ¿Cómo recortar espacios en blanco de valores de la matriz en PHP
Buena pregunta, 1. Vea mi respuesta para una solución de una línea de XPath 1.0 - solución (y, por supuesto, esta es también una solución XSLT 1.0, también). :) No se necesitan/utilizan funciones de extensión. –
Verifique mi respuesta para una solución de llamadas de tres funciones. –