Convertir un texto a mayusculas (toUpper) o minusculas (toLower) con transformadas xslt
Muchas veces, cuando necesitamos manipular texto desde transformaciones xsl, nos encontramos con el caso de que tenemos un texto en mayúsculas o un texto en minúsculas y queremos convertirlo a minúsculas o mayúsculas respectivamente. En cualquier lenguaje, solemos tener métodos para hacer un ToUpper, strtoupper o por el contrario ToLower, strtolower y similares, pero en xsl, al ser tan genérico, no disponemos de ese tipo de funciones, aunque si deberían de estar.
Para suplir esta necesidad, me he creado 2 funciones muy útiles que utilizan la funcion traslate, que comentare en otro articulo. Básicamente lo que hacemos es intercambiar una cadena por la otra en base a lo que va entrando por un texto. Con estas funciones podemos llamar a StringToLower o StringToUpper como si de un template normal se tratase, indicandole el texto que queremos convertir a mayúsculas o convertir a minúsculas y automáticamente nos convertirá la cadena.
El código seria el siguiente:
<!-- Variables globales --> <xsl:param name="lower" select="'abcdefghijklmnopqrstuvwxyz'" /> <xsl:param name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> <!-- Convierte una cadena de texto, todo en minusculas --> <!-- @param string text Cadena a convertir a minusculas --> <!-- @return Cadena en minusculas --> <xsl:template name="StringToLower"> <xsl:param name="text"/> <xsl:value-of select="translate($text,$upper,$lower)"/> </xsl:template> <!-- Convierte una cadena de texto, todo en mayusculas --> <!-- @param string text Cadena a convertir a mayusculas --> <!-- @return Cadena en mayusculas --> <xsl:template name="StringToUpper"> <xsl:param name="text"/> <xsl:value-of select="translate($text,$lower,$upper)"/> </xsl:template> <xsl:call-template name="StringToLower"> <xsl:with-param name="text" select="'Mi texto que quiere ser Reemplazado a minusculas'" /> </xsl:call-template> <xsl:call-template name="StringToUpper"> <xsl:with-param name="text" select="'Mi texto que quiere ser Reemplazado a mayusculas'" /> </xsl:call-template>
El resultado de esta tranformacion del StringToLower seria «mi texto que quiere ser reemplazado a minúsculas» y la segunda llamada con el StringToUpper seria «MI TEXTO QUE QUIERE SER REEMPLAZADO A MAYUSCULAS». Esto es algo muy útil para trabajar con textos.