Xml

Reemplazar texto en transformada xslt

Trabajo desde hace años usando de una forma intensiva las transformadas xslt, y a pesar de que son fáciles de utilizar y se pueden hacer infinidad de cosas, llegando al caso de ser propiamente dicho, un lenguaje de programación, hay algo que siempre he echado en falta. A pesar de que xsl tiene funciones para el tratamiento de cadenas como substring, startwith, concat, etc. nunca he visto que tenga una función para reemplazar texto, algo que seria muy útil. Siempre que he tenido que hacer un reemplazo de texto lo he hecho de diferentes formas, a cual mas chapucera. Si tenia que sustituir una frase entera, llenaba el xsl de xsl:if o de xsl:choose con sus consecuentes xsl:when, pero si tenia que sustituir parte de una frase, ya la cosa se complicaba mas, usando casi siempre el nombre de espacio user, y definiendo una función en el lenguaje que utilizaba (en mi caso .net), pero esto tiene un problema, si por algún casual, quiero migrar a otro lenguaje (que no veo yo a mi jefe mucho por la labor), la transformada no me serviría fuera del entorno de .net.

Para solucionar este problema, decidí crear una función de xsl, mas que una función es un template, pero como a mi me gusta usar los templates como funciones con parámetros, también me gusta llamarlas funciones. Bueno, el caso es que he creado una función/template, que recibe 3 parámetros, y que vendría a ser mas o menos como el replace de php, pero con el funcionamiento del replace de javascript, porque de momento solo reemplaza de 1 en 1, digamos que no es un replace all. La función recibe 3 parámetros, uno con el texto a base, la cadena de donde queremos reemplazar el texto, otro parámetro con el texto que va a ser reemplazado, y otro parámetro con el texto a reemplazar. El código de la función seria el siguiente:



   
   
   
   
   
   

   
   
   
   





   
      
      
      
   

Espero que esta pequeña función para xsl, os sea tan útil como a mi. Por cierto, el ejemplo me lo saque de uno que monte en el curro, así que cada uno lo tendrá que modificar en base a sus necesidades. A ver si me lo curro un poco y modifico la función para que sea un replace all, en lugar de un replace one.

Símbolo del euro en xml o xslt sin utf-8

Durante el desarrollo de mi último proyecto, me encontré con un xml de transformación o xslt, donde debía de usar el símbolo del euro (€), pero esta transformada, que no deja de ser un xml, estaba codificada en iso-8859-1, y no podía cambiar la codificación. A la hora de añadir el símbolo del euro, si usaba directamente el carácter €, fallaba porque estaba mezclando codificaciones, y si usaba € como viene siendo en html, fallaba porque no es un carácter válido de xslt. La solución, usar los caracteres especiales, en este caso para el euro (€) es el €

Scroll al inicio