MySQL añade soporte para XPath
En la nueva versión 5.1 de MySQL, fueron añadidas dos funciones: ExtractValue() y UpdateXML(), que permiten hacer consultas a registros con contenido XML utilizando XPath. Todavía están bastante beta, pero vale la pena mencionarlas. En este artículo vamos a ver como se usan estas funciones y que tan útiles pueden llegar a ser.
Para los que no sabían de la existencia de XPath, pueden consultar antes esta Introducción a XPath.
Básicamente, estas dos funciones nos van a permitir hacer consultas utilizando expresiones XPath, para actualizar y buscar contenido XML en nuestras tablas.
Veamos un ejemplo. Tenemos la siguiente tabla:
[sourcecode language="sql"]
CREATE TABLE personas (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
amigos TEXT NOT NULL
);
INSERT INTO personas (nombre, amigos) VALUES (“Jack Bauer”, “
INSERT INTO personas (nombre, amigos) VALUES (“Homer Simpson”, “
[/sourcecode]
Como pueden ver, la tabla contiene un campo amigos, donde los registros almacenan contenido XML. Ahora vamos a utilizar las funciones que nos provee MySQL para modificar y buscar dentro de este contenido mediante expresiones XPath.
ExtractValue()
A esta función se le pasa como primer parámetro el contenido XML donde queremos buscar, y como segundo parámetro la expresión XPath. Devuelve el resultado de la búsqueda, y en caso de que el contenido XML no sea válido devuelve NULL.
Esta función es ideal para combinarse con la cláusula SELECT. Veamos un ejemplo con la tabla expuesta anteriormente:
[sourcecode language="sql"]
SELECT ExtractValue(amigos, “//amigo/nombre”) FROM personas;
[/sourcecode]
Fíjense que llamamos a la función ExtractValue() pasándole como contenido XML el valor del campo amigos, y una expresión XPath solicitando los nombres de los amigos. Nos devolvería:
+----------------------------------------+ | ExtractValue(amigos, "//amigo/nombre") | +----------------------------------------+ | Tony Almeida Chloe O'Brian | | Lenny Carl | +----------------------------------------+
Algunos ejemplos más:
[sourcecode language="sql"]
SELECT nombre, ExtractValue(amigos, “count(//amigo)”) AS cant_amigos FROM personas;
[/sourcecode]
+---------------+-------------+ | nombre | cant_amigos | +---------------+-------------+ | Jack Bauer | 2 | | Homer Simpson | 2 | +---------------+-------------+
[sourcecode language="sql"]
SELECT nombre, ExtractValue(amigos, “//amigo[1]/nombre”) AS mejor_amigo FROM personas;
[/sourcecode]
+---------------+--------------+ | nombre | mejor_amigo | +---------------+--------------+ | Jack Bauer | Tony Almeida | | Homer Simpson | Lenny | +---------------+--------------+
UpdateValue()
A esta función se le pasa como primer parámetro el contenido XML a modificar, como segundo parámetro la expresión XPath que devuelve el trozo de XML a reemplazar, y como tercer parámetro el nuevo trozo de XML. Sirve para combinarse con la cláusula UPDATE, ejemplo:
[sourcecode language="sql"]
UPDATE personas SET amigos=UpdateXML(amigos, “//amigo[1]/nombre”, “
[/sourcecode]
Le pasamos como contenido XML el valor del campo amigos, una expresión XPath que devuelve el elemento nombre del primer amigo, y el valor de reemplazo, en este caso el nuevo nombre.
Conclusiones
Bueno, el soporte para estas funciones está aún bajo desarrollo, y la sintaxis de XPath tiene algunas limitaciones, pero aún así puede usarse para simplificar la consulta y actualización de registros con contenido XML.
Pueden consultar la documentación oficial de MySQL para más info.
3 comentarios3 comentarios
Dejá una respuesta








Enhorabuena por tu blog, Sherekan, me has alegrado el día.
Por cierto, es posible que la nueva temporada de 24 consiga que tu ejemplo sea, de alguna manera, incorrecto.
thank u r information
it very useful
[...] consultar la documentación oficial de MySQL para más info. 2 comentarios –> Published 08-06-2009 5:05 PM por David [...]