Motor: MySQL
Versión Mínima: MySQL 5.1.5
Fuente:
http://dev.mysql.com/doc/refman/5.1/...functions.html http://dev.mysql.com/tech-resources/...ql5.1-6.0.html
1. Fichero XML
Código:
D:\xml>dir
Volume in drive D has no label.
Volume Serial Number is CE41-1E7C
Directory of D:\xml
13/10/2008 12:07 <DIR> .
13/10/2008 12:07 <DIR> ..
13/10/2008 12:11 445 data.xml
1 File(s) 445 bytes
2 Dir(s) 5.093.183.488 bytes free
2. Tabla XML. En el caso de MySQL, no existen (por ahora) los tipos de datos XML, por lo tanto, hay que utilizar BLOBs, cosa que no me gusta mucho, dado que las APIs que existen actualmente para el acceso a este tipo de datos son un poco limitadas.
Código:
mysql> create table t1 (id int, xml_data blob);
Query OK, 0 rows affected (0.00 sec)
3. Carga del fichero XML via SQL.
Código:
mysql> insert into t1 values (1,LOAD_FILE('d:\\xml\\data.xml'));
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;
| id | xml_data
| 1 | <?xml version='1.0' encoding='UTF-8' ?>
<root>
<entity>
<id>1</id>
<f_name>nombre_1</f_name>
<l_name>apellido_1</l_name>
<dni>dni_1</dni>
</entity>
<entity>
<id>2</id>
<f_name>nombre_2</f_name>
<l_name>apellido_2</l_name>
<dni>dni_2</dni>
</entity>
<entity>
<id>3</id>
<f_name>nombre_3</f_name>
<l_name>apellido_3</l_name>
<dni>dni_3</dni>
</entity>
</root>
1 row in set (0.00 sec)
4. Ejemplos de XQuery y XPath
Código:
mysql> select ExtractValue(xml_data,'root//entity[1]//l_name') from t1;
+--------------------------------------------------+
| ExtractValue(xml_data,'root//entity[1]//l_name') |
+--------------------------------------------------+
| apellido_1 |
+--------------------------------------------------+
1 row in set (0.00 sec)
mysql> select id from t1
-> where ExtractValue(xml_data,'root//entity[1]//l_name') = 'apellido_1';
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
5. No implementado en forma nativa
6. Actualizar datos
Código:
mysql> update t1 set xml_data =
-> UpdateXML(xml_data,'root//entity[1]//l_name','<l_name>apellido_11</l_name>') ;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from t1;
| id | xml_data
| 1 | <?xml version='1.0' encoding='UTF-8' ?>
<root>
<entity>
<id>1</id>
<f_name>nombre_1</f_name>
<l_name>apellido_11</l_name>
<dni>dni_1</dni>
</entity>
<entity>
<id>2</id>
<f_name>nombre_2</f_name>
<l_name>apellido_2</l_name>
<dni>dni_2</dni>
</entity>
<entity>
<id>3</id>
<f_name>nombre_3</f_name>
<l_name>apellido_3</l_name>
<dni>dni_3</dni>
</entity>
</root>
1 row in set (0.00 sec)
7. Transformar una tabla a XML
Código:
mysql> create table t2
-> (id int,
-> f_name varchar(30),
-> l_name varchar(30),
-> dni varchar(30)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t2 values (1,'nombre_1','apellido_1','dni_1');
Query OK, 1 row affected (0.69 sec)
mysql> insert into t2 values (2,'nombre_2','apellido_2','dni_2');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t2 values (3,'nombre_3','apellido_3','dni_3');
Query OK, 1 row affected (0.00 sec)
7.1 Lamentablemente, en forma nativa, la única manera documentada es con el parámetro --xml del binario mysql, lo que facilita el volcado del resulset a un fichero XML, pero lo complica para enviarlo a un Recordset de cualquier lenguaje de programación. Existen UDFs de terceros que se pueden utilizar, lib_mysqludf_xql.
Código:
mysql -u root --xml=TRUE -e "SELECT * FROM xml.t1 ORDER BY id" -p xml
No publico el output, por problemas de caracteres con la consola de MS-DOS.