<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Inserci%C3%B3n_e_extracci%C3%B3n_de_informaci%C3%B3n_en_XML</id>
	<title>Inserción e extracción de información en XML - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Inserci%C3%B3n_e_extracci%C3%B3n_de_informaci%C3%B3n_en_XML"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Inserci%C3%B3n_e_extracci%C3%B3n_de_informaci%C3%B3n_en_XML&amp;action=history"/>
	<updated>2026-10-21T05:58:04Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Inserci%C3%B3n_e_extracci%C3%B3n_de_informaci%C3%B3n_en_XML&amp;diff=21080&amp;oldid=prev</id>
		<title>Arribi: /* Busca e actualización de información en documentos XML almacenados na BBDD */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Inserci%C3%B3n_e_extracci%C3%B3n_de_informaci%C3%B3n_en_XML&amp;diff=21080&amp;oldid=prev"/>
		<updated>2011-03-01T15:57:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Busca e actualización de información en documentos XML almacenados na BBDD&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;A continuación traballaremos co sistema xestor de bases de datos relacional (SXBDR) MySQL para coñecer algunhas funcións con soporte para XML deste tipo de xestores. En concreto para a &amp;#039;&amp;#039;&amp;#039;almacenaxe&amp;#039;&amp;#039;&amp;#039; de información en formato XML, para a &amp;#039;&amp;#039;&amp;#039;creación&amp;#039;&amp;#039;&amp;#039; de documentos XML a partir de información almacenada na BBDD e para a &amp;#039;&amp;#039;&amp;#039;busca&amp;#039;&amp;#039;&amp;#039; de información dentro da BBDD. MySQL ten soporte para isto a través das funcións [http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_updatexml UpdateXML()] [http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_extractvalue ExtractValue()]. &lt;br /&gt;
&lt;br /&gt;
Con todo, no apartado de [[Almacenamento_XML_nativo|almacenamento nativo en XML]] veremos que estas técnicas son moito máis doadas, xa que as NXD están pensadas especificamente para este propósito.&lt;br /&gt;
&lt;br /&gt;
==Almacenaxe de información en formato XML==&lt;br /&gt;
Para almacenar ficheiros XML nunha BBDD relacional podemos crear unha táboa que conteña unha columna que sexa o documento XML como un varchar:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; create database xml_db;&lt;br /&gt;
Query OK, 1 row affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; use xml_db;&lt;br /&gt;
Database changed&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; CREATE TABLE documentos (doc_xml VARCHAR(150));&lt;br /&gt;
Query OK, 0 rows affected (0.01 sec)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Para introducir os documentos podémolo facer como se fosen novos rexistros:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; INSERT INTO documentos VALUES&lt;br /&gt;
    -&amp;gt; (&amp;#039;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;book&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;title&amp;gt;O lapis do carpinteiro&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;author&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;initial&amp;gt;MR&amp;lt;/initial&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;surname&amp;gt;Rivas&amp;lt;/surname&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;/author&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;/book&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;#039;);&lt;br /&gt;
Query OK, 1 row affected (0.01 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; INSERT INTO documentos VALUES&lt;br /&gt;
    -&amp;gt; (&amp;#039;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;book&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;title&amp;gt;Cosmos&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;author&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;initial&amp;gt;CS&amp;lt;/initial&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;surname&amp;gt;Sagan&amp;lt;/surname&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;/author&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;lt;/book&amp;gt;&lt;br /&gt;
    &amp;#039;&amp;gt; &amp;#039;);&lt;br /&gt;
Query OK, 1 row affected (0.01 sec)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Existen métodos máis automatizados e rápidos para facer a carga dun ficheiro XML no MySQL, por exemplo, mediante un script PHP.&lt;br /&gt;
&lt;br /&gt;
==Busca e actualización de información en documentos XML almacenados na BBDD==&lt;br /&gt;
A función &amp;#039;&amp;#039;&amp;#039;ExtractValue()&amp;#039;&amp;#039;&amp;#039; permite obter resultados da BBDD a partir dunha expresión XPath. Por exemplo, &lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; SELECT EXTRACTVALUE(doc_xml,&amp;#039;/book/author/initial&amp;#039;) AS INICIAIS FROM documentos;&lt;br /&gt;
&lt;br /&gt;
+----------+&lt;br /&gt;
| INICIAIS |&lt;br /&gt;
+----------+&lt;br /&gt;
| MR       |&lt;br /&gt;
| CS       |&lt;br /&gt;
+----------+&lt;br /&gt;
2 rows in set (0.01 sec)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O primeiro parámetro de ExtractValue() é un documento XML (no noso caso está almacenado na columna doc_xml da táboa documentos) e o segundo unha expresión XPath. Vexamos outro exemplo:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; SELECT extractValue(doc_xml,&amp;#039;/book/child::*&amp;#039;) AS Titulos FROM documentos;&lt;br /&gt;
+-----------------------------------+&lt;br /&gt;
| Titulos                           |&lt;br /&gt;
+-----------------------------------+&lt;br /&gt;
| O lapis do carpinteiro            |&lt;br /&gt;
| Cosmos                            |&lt;br /&gt;
+-----------------------------------+&lt;br /&gt;
2 rows in set (0.00 sec)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E un último exemplo onde se inclúe unha expresión condicional na expresión XPath:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; SELECT extractValue(doc_xml,&amp;#039;/book/author/surname[self:text()=&amp;quot;Sagan&amp;quot;]&amp;#039;) AS Nome from documentos;&lt;br /&gt;
+-------+&lt;br /&gt;
| Nome  |&lt;br /&gt;
+-------+&lt;br /&gt;
| Sagan |&lt;br /&gt;
|       |&lt;br /&gt;
+-------+&lt;br /&gt;
2 rows in set (0.00 sec)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A función &amp;#039;&amp;#039;&amp;#039;UpdateXML()&amp;#039;&amp;#039;&amp;#039; serve para actualizar un valor no documento XML almacenado na BBDD. No seguinte exemplo actualizamos todos os elementos initial co valor SUBSTITUCION:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; select UpdateXML(doc_xml,&amp;#039;/book/author/initial&amp;#039;,&amp;#039;SUBSTITUCION&amp;#039;) AS Resultado from documentos;&lt;br /&gt;
+---------------------------------------------------------------------------------------------------------------------+&lt;br /&gt;
| Resultado                                                                                                           |&lt;br /&gt;
+---------------------------------------------------------------------------------------------------------------------+&lt;br /&gt;
| &lt;br /&gt;
&amp;lt;book&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;O lapis do carpinteiro&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;author&amp;gt;&lt;br /&gt;
SUBSTITUCION&lt;br /&gt;
&amp;lt;surname&amp;gt;Rivas&amp;lt;/surname&amp;gt;&lt;br /&gt;
&amp;lt;/author&amp;gt;&lt;br /&gt;
&amp;lt;/book&amp;gt;&lt;br /&gt;
 |&lt;br /&gt;
| &lt;br /&gt;
&amp;lt;book&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Cosmos&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;author&amp;gt;&lt;br /&gt;
SUBSTITUCION&lt;br /&gt;
&amp;lt;surname&amp;gt;Sagan&amp;lt;/surname&amp;gt;&lt;br /&gt;
&amp;lt;/author&amp;gt;&lt;br /&gt;
&amp;lt;/book&amp;gt;&lt;br /&gt;
                  |&lt;br /&gt;
+---------------------------------------------------------------------------------------------------------------------+&lt;br /&gt;
2 rows in set (0.00 sec)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se se quere que os cambios pasen á BBDD habería que usar comando UPDATE de SQL.&lt;br /&gt;
&lt;br /&gt;
==Creación de documentos XML a partir dos datos==&lt;br /&gt;
Unha operación bastante habitual é obter documentos XML a partir dos datos dunha BBDD. Por exemplo, a partir dunha consulta. No MySQL Query Browser é moi doado, tal e como se pode ver no seguinte vídeo [[Media:Exemplo.ogg]]. &lt;br /&gt;
&lt;br /&gt;
Normalmente, a exportación da consulta a XML xera un documento .xml e outro .dtd ou .xsd coas restricións correspondentes a partir da BBDD.&lt;br /&gt;
&lt;br /&gt;
Tamén se pode usar a liña de comando coa opción -X habilitada. Calquera operación que realicemos devolverá a saída en formato de ficheiro XML. Neste caso usamos facemos unha consulta á taboa NOTAS_ALUMNOS da base de datos alumnos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
alumno@proxecto-integrado:~$ mysql -u root -p -X&lt;br /&gt;
Enter password: &lt;br /&gt;
Welcome to the MySQL monitor.  Commands end with ; or \g.&lt;br /&gt;
Your MySQL connection id is 118&lt;br /&gt;
Server version: 5.1.41-3ubuntu12.9 (Ubuntu)&lt;br /&gt;
&lt;br /&gt;
Type &amp;#039;help;&amp;#039; or &amp;#039;\h&amp;#039; for help. Type &amp;#039;\c&amp;#039; to clear the current input statement.&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; use alumnos;&lt;br /&gt;
Reading table information for completion of table and column names&lt;br /&gt;
You can turn off this feature to get a quicker startup with -A&lt;br /&gt;
&lt;br /&gt;
Database changed&lt;br /&gt;
mysql&amp;gt; select * from NOTAS_ALUMNOS where nota2&amp;gt;8;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;resultset statement=&amp;quot;select * from NOTAS_ALUMNOS where nota2&amp;amp;gt;8;&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;row&amp;gt;&lt;br /&gt;
	&amp;lt;field name=&amp;quot;nome_alumno&amp;quot;&amp;gt;Corregidor Sánchez, Ana&amp;lt;/field&amp;gt;&lt;br /&gt;
	&amp;lt;field name=&amp;quot;nota1&amp;quot;&amp;gt;6&amp;lt;/field&amp;gt;&lt;br /&gt;
	&amp;lt;field name=&amp;quot;nota2&amp;quot;&amp;gt;9&amp;lt;/field&amp;gt;&lt;br /&gt;
	&amp;lt;field name=&amp;quot;nota3&amp;quot;&amp;gt;8&amp;lt;/field&amp;gt;&lt;br /&gt;
	&amp;lt;field name=&amp;quot;materia&amp;quot;&amp;gt;LINGUA&amp;lt;/field&amp;gt;&lt;br /&gt;
	&amp;lt;field name=&amp;quot;curso&amp;quot;&amp;gt;3ESO&amp;lt;/field&amp;gt;&lt;br /&gt;
  &amp;lt;/row&amp;gt;&lt;br /&gt;
&amp;lt;/resultset&amp;gt;&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este método permite obter moi facilemente un documento XML a partir dunha consulta pero ten a desvantaxe de que o mapeado entre a BBDD relacional e o XML é fixo, é dicir, non hai xeito de cambiar os nomes das etiquetas, controlar se os datos teñen que ser formatados como texto ou como atributos, establecer o espazo de nomes, etc.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Veiga|Rafael Veiga]]&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Arribi|Jesús Arribi]] 11:24 17 feb 2011 (GMT)&lt;/div&gt;</summary>
		<author><name>Arribi</name></author>
	</entry>
</feed>