Dizque



Programando, XML y sus sabores

El que escapa come

Saltar a Anotaciones relacionadas

Sigo con mis trabajitos sobre XML y XSLT. Detallo: estoy haciendo unos programitas que:

  1. extraen información de la base de datos (el SGBD es Informix, por cierto) y generan un informe en XML (llamémosle informe.xml);
  2. el informe en XML se procesa mediante XSLT para generar un fichero de texto marcado con XPress Tags (que es un lenguaje de marcado para QuarkXPress). Llamemos al fichero resultado informe.xtg;
  3. en un archivo de QuarkXPress con estilos ya definidos, se importa el fichero informe.xtg. Como todo el texto viene marcado y los estilos ya están definidos, los ajustes que habrá que realizar a manubrio serán mínimos.

El problema que me ha surgido hoy es que algunos de los campos de la base de datos contienen el símbolo & (ampersand), que se da de patadas con el procesador XML (por cierto, utilizo XMLStarlet y va la mar de bien). Así que algo había que hacer.

Lo primero que se me ha ocurrido es sustituir esos & por & al grabar el contenido del campo. Para ello tendría que escribir una función que hiciera la sustitución. Escribirla no supone ninguna complicación, pero ¿andar llamándola cada dos líneas? Demasiado tecleo para un programador.

Así que luego he pensado, «leñe, ¿y si hago la sustitución después?» Venga, pues vamos a ver cómo lo hacemos:

$  man sed

Leo y releo y veo que la sintaxis para realizar una sustitución es esta:

$ sed -e s/patron_de_búsqueda/reemplazo/ fichero_de_entrada

Venga, pues vamos allá, escribo:

$ sed -e s/&/&/ informe.xml

Horor de los horrores, la ejecución de dicho comando resulta en el mensaje no se puede analizar la función s/. Le echo otra ojeada al manual (man sed) y veo que el caracter & tiene un significado especial dentro de la cadena de reemplazo. Pues nada, habrá que escaparlo:

$ sed -e s/&/\&/ informe.xml

Nada, que ni flores, que no chuta. Sigamos escapando:

$ sed -e s/\&/\&/ informe.xml

Um, no todavía no hemos dado con lo que buscábamos, ahora el mensaje es No se puede analizar la función s/&/&amp. Deduzco que ahora debería escapar el punto y coma:

$ sed -e s/\&/\&amp\;/ informe.xml

Hecho. Quede aquí explicado para futura referencia.

Y dicho esto, me escapo a comer.




Di la tuya

Puedes usar markdown y estas etiquetas HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> . Por favor, evita el abuso de las mayúsculas y cuida la ortografía.