Librería para que MySQL devuelva XML

Ya hace tiempo comentamos como hacer para que MySQL devolviera los datos en formato XML mediante procedimientos almacenados. En este caso se trata de la librería lib_mysqludf_xql que permite mediante un conjunto de funciones mostrar la salida de las consultas en formato XML, sin necesidad de utilizar lenguajes de programación tipo PHP o Ruby.

Esta librería usa xmlwriter de libxml2, la cual es una librería muy rápida sin caché, además escapa directamente las entidades XML y trata de forma muy eficiente la memoria cuando el contenido crece.

Un ejemplo de uso sería el siguiente:

SELECT xql_agg('classes' AS `xql:root`,
xql_element('class', null, concat(grade, suffix) AS name, teacher))
FROM schoolclass;

Y el resultado sería el siguiente:

<classes>
<class name="1A" teacher="Pullen"/>
<class name="2A" teacher="Berg"/>
<class name="3A" teacher="Heijden"/>
<class name="3B" teacher="Ven"/>
<class name="4A" teacher="Theunissen"/>
<class name="4B" teacher="Huizingh"/>
<class name="4C" teacher="Groot"/>
<class name="5A" teacher="Brongers"/>
<class name="5B" teacher="Zijlstra"/>
<class name="6A" teacher="Brommer"/>
<class name="7A" teacher="Nimwegen"/>
<class name="7B" teacher="Lede"/>
<class name="8A" teacher="Spaansen"/>
<class name="8B" teacher="Wiersma"/>
</classes>

lib_mysqludf_xql

Devolver XMLs mediante MySQL

Existen bastantes ocasiones en los que el envío de información mediante XML es necesario, por ejemplo web services. Normalmente los datos que necesitamos enviar están almacenados en la base de datos, si necesitamos enviar esos datos en formato XML, normalmente solemos recuperar los datos en formato normal y luego transformarlo a XML mediante nuestro lenguaje de programación (por ejemplo PHP).
En este caso, mediante MySQL y los procedimientos almacenados, podemos crear una consulta que devuelva cada registro en formato XML, aunque habrá que incluirlo entre una etiqueta padre y añadirlo la cabecera XML (<?xml version …).
Las funciones que nos ofrece el autor son tres: xml_escape para remplazar caracteres no permitidos en un XML, xml_attr para crear un atributo XML y xml_tag para crear una etiqueta XML.
XML output from MySql