Como pasar datos de MySQL a XML con PHP
Este tutorial te mostrará como coger la información almacenada en una base de datos MySQL y pasarla a XML. Desde ahí puedes usar el XML como quieras. Esto puede ser útil para blogs, aplicaciones web, o incluso para CMS (Content Management Systems) para tu sitio o sitios web.
Utilizar XML tiene muchas ventajas:
• Es extensible. Una vez diseñado un lenguaje, es posible extenderlo con la adición de nuevas etiquetas.
• El analizador es un componente estándar, no es necesario crear un analizador específico.
• Soporta Unicode.
• Si un tercero decide usar un documento creado en XML, es sencillo entender su estructura y procesarlo.
Preparar la base de datos
Lo bueno de esto es que no tendrás que cambiar la estructura de la base de datos existente. Los únicos cambios tendrás que hacerlos en el código PHP.
Como es solo un ejemplo voy a incluir únicamente cuatro campos en la bbdd: id, nombre, email y texto y una tabla llamada tablaEjemplo.
Código PHP
Primero hay que especificar para el navegador u otra aplicacion que usará este archivo, que lo interprete como XML y no como PHP.
header("Content-type: text/xml");
El segundo paso es especificar las variables para la conexión MySQL:
$host = "localhost"; $user = "usuario"; $pass = "contraseña"; $database = "prueba";
Y ahora para hacer la conexión al servidor MySQL, utilizamos las variables establecidas antes:
$enlace = mysql_connect($host, $user, $pass) or die("Error MySQL."); mysql_select_db($database, $enlace) or die("Error base de datos.");
Una vez la conexión creada hay que ejecutar la query que deseamos. Posteriormente guardamos la consulta en la variable $resultado:
$query = "SELECT * FROM tablaEjemplo ORDER BY id ASC"; $resultado = mysql_query($query, $enlace) or die("Sin resultados.");
Ahora hay que crear una variable XML de datos:
$salida_xml = "<?xml version=\"1.0\"?>\n"; $salida_xml .= "<informacion>\n";
Las siguientes líneas son para el bucle que saca la información con la query y mantiene el bucle tanto como filas tiene nuestra base de datos.
Mysql_fetch_assoc() toma la fila actual en la base de datos y lo exporta como una matriz (array) asociativa. Esto hace mas fácil hacer un seguimiento de nuestra información, porque cuando queremos sacar varios campos solo tendremos que poner $nombreMatriz['nombreCampo'].
Las tres líneas que utilizan str_replace corrigen los caracteres incorrectos en XML que podrían causar fallos. La razón por la que solo se corrige la fila [texto] es porque es la única donde existe la posibilidad de contener esos caracteres.
Para utilizar la información sacada de la base de datos hay que poner “$fila ['id']“ entre las etiquetas XML.
for($x = 0 ; $x < mysql_num_rows($resultado) ; $x++){ $fila = mysql_fetch_assoc($resultado); $salida_xml .= "\t<persona>\n"; $salida_xml .= "\t\t<nombre>" . $fila['nombre'] . "</nombre>\n"; $salida_xml .= "\t\t<email>" . $fila['email'] . "</email>\n"; // Corrigiendo caracteres incorrectos $fila['texto'] = str_replace("&", "&", $fila['texto']); $fila['texto'] = str_replace("<", "<", $fila['texto']); $fila['texto'] = str_replace(">", ">", $fila['texto']); $salida_xml .= "\t\t<texto>" . $fila['texto'] . "</texto>\n"; $salida_xml .= "\t</persona>\n"; }
Cierro los datos XML con la variable abierta antes:
$salida_xml .= "</informacion>";
Finalmente hay que poner la cadena de salida XML:
echo $salida_xml;
Resultado final:
<?php header("Content-type: text/xml"); $host = "localhost"; $user = "usuario"; $pass = "contraseña"; $database = "prueba"; $enlace = mysql_connect($host, $user, $pass) or die("Error MySQL."); mysql_select_db($database, $enlace) or die("Error base de datos."); $query = "SELECT * FROM tablaEjemplo ORDER BY id ASC"; $resultado = mysql_query($query, $enlace) or die("Sin resultados."); $salida_xml = "<?xml version=\"1.0\"?>\n"; $salida_xml .= "<informacion>\n"; for($x = 0 ; $x < mysql_num_rows($resultado) ; $x++){ $fila = mysql_fetch_assoc($resultado); $salida_xml .= "\t<persona>\n"; $salida_xml .= "\t\t<nombre>" . $fila['nombre'] . "</nombre>\n"; $salida_xml .= "\t\t<email>" . $fila['email'] . "</email>\n"; // Corregiendo caracteres incorrectos $fila['texto'] = str_replace("&", "&", $fila['texto']); $fila['texto'] = str_replace("<", "<", $fila['texto']); $fila['texto'] = str_replace(">", ">", $fila['texto']); $salida_xml .= "\t\t<texto>" . $fila['texto'] . "</texto>\n"; $salida_xml .= "\t</persona>\n"; } $salida_xml .= "</informacion>"; echo $salida_xml; ?>
Consultas más exactas
También existe la posibilidad de hacer consultas más exactas.
Especificando una variable, mediante un formulario o a través de la url:
//Para formulario hay que usar POST $varUnic = $_POST['varUnic']; //Directamente desde la url con GET $varUnic = $_GET['varUnic'];
Después de esto solo hay que modificar la query:
$query = "SELECT * FROM tablaEjemplo WHERE varUnic=$varUnic";
Comentarios
21 respuestas para “Como pasar datos de MySQL a XML con PHP”
Deja una respuesta





[...] aplicaciones web, o incluso para CMS (Content Management Systems) para tu sitio o sitios web.Mas: http://www.bujorel.net/tutorial/como-pasar-datos-de-mysql-a-xml-con-php/ [...]
Muy buen ejemplo es lo que necesitaba gracias Bj.
He hecho alguna variacion en el script como es el include de conexion y adaptar los datos a una tabla, pero me da el siguiente error:
“La etiqueta de fin ‘br’ no coincide con la etiqueta de inicio ‘html’. Error al procesar el recurso http://localhost/plazos/...
”
El script completo es:
<?php
header(“Content-type: text/xml”);
include”conecta1.php”;
$query = “SELECT * FROM empresas ORDER BY id_empresas ASC”;
$resultado = mysql_query($query) or die(“Sin resultados.”);
$salida_xml = “\n”;
$salida_xml .= “\n”;
for($x = 0 ; $x < mysql_num_rows($resultado) ; $x++){
$fila = mysql_fetch_assoc($resultado);
$salida_xml .= “\t\n”;
$salida_xml .= “\t\t” . $fila['id_empresas'] . “\n”;
$salida_xml .= “\t\t” . $fila['cif'] . “\n”;
$salida_xml .= “\t\t” . $fila['nombre'] . “\n”;
$fila['notas'] = str_replace(“&”, “&”, $fila['notas']);
$fila['notas'] = str_replace(“”, “>”, $fila['notas']);
$salida_xml .= “\t\n”;
}
$salida_xml .= “”;
echo $salida_xml;
?>
Te agradezco tu ayuda, estaba buscando algo asi.-
Al ser PHP el archivo no contiene ni BR ni HTML como ves arriba.
Gracias por tu rápida contestación.-Ya he conseguido que funcione.-Ahora tengo otro problema distinto.-Al sacar los datos de la BD cuando encientra un tilde,una ñ o similar me dice caracter desconocido.-¿me puedes ayudar a darle solución.-
Tienes que reemplazar todos esos caracteres ya que no son validos para el xml. Te envío un ejemplo de caracteres que tienes que sustituir.
Y como sustituirlos.
strtolower(strtr($valor['name'],$trans))
//Array con caracteres a sustituir
$trans = array(“á” => “a”, “é” => “e”, “í” => “i”, “ó” => “o”,”ú” => “u”, “ñ” => “n”, “Á” => “a”, “É” => “e”, “Í” => “i”, “Ó” => “o”,”Ú” => “u”, “Ñ” => “n”, “ç” => “c”, “Ç” => “c”, “ü” => “u”, “Ü” => “u”, “‘” => “-”, ” ” => “_”, “,” => “-”, “/” => “-”, “(” => “”, “)” => “”, “à” => “a”, “è” => “e”, “ì” => “i”, “ò” => “o”, “ù” => “u”, “ä” => “a”, “ë” => “e”, “ï” => “i”, “ö” => “o”, “´” => “-”, “`” => “-”, “.” => “-”, “&” => “”, “?” => “”, “¿” => “”, “@” => “-”, “!” => “”, “%” => “”, “ã” => “a”, “â” => “a”, “ß” => “B”, “ê” => “e”, ” / ” => “_”);
yo soy muy nuevo en esto hago el ejemplo en localhost y con la misma bd pero me sale esto en en navegador cuando la veo
No se puede mostrar la página XML
No se puede ver la entrada XML con la hoja de estilo . Corrija el error y haga clic en el botón Actualizar, o inténtelo de nuevo más tarde.
favor una ayuda solo encontre este tutorial que creo esta bueno, pero yo soy medio lento gracias
¿Puedes subir en alguna parte el archivo XML generado? Tienes que guardarlo…
De todos modos, sí abres la página con Firefox te dirá el error, o por lo menos la línea que falla.
es bien el ejemplo.
pero pienso que para resolver el problema de caracteres podrian colocar el texto dentro de secciones CDATA, ejemplo:
Asi desde el Flash puede recuperar la informacion
la propiedad nodeValue o pueden usar firstChild si el nodeValue le arroja NULL
Como guardo el documento como .xml o como php?
uhmm si pues falto decir como guardarlo…
hasta hace un poco un amigo me dijo q los manejos de archivos era una tonteria y estaban de mas error ps te sacan de apuros como este.
crea un archivo cualquiera en donde pondras el script q esta acontinuacion y tambien crea otra hoja pero con el nombre documento.xml
esto ara q el archivo se guarde y el w+
ara q el archivo se genere y se refreske en cada cambio ps si quieres darle otra forma de guardar y manejar archivo te aconsejo q revises el tema manejo de archivos ahi podras jugar mejor
con los modos de abrir archivos bueno espero q te sirva tales como a, r, w
sacrifica tus sueños para q logres tus sueños…
$file=fopen(“documento.xml”,”w+”);
$cadena=”$salida_xml”;
fputs($file,$cadena);
fclose($file);
Hola Gary!
Tu ultimo código para guardar el archivo, cómo lo vinculo con el archivo que hará la consulta? No veo como relacionarlo.
Lo que si es que me marca error en “$cadena=”$salida_xml”;” ahí marca error, no procesa esa linea, porque?
Yo como quiero estructurar mi pagina es para actualizar noticias, así tengo la estructura de sa seccion:
Login->Formulario de actualización->PHP->MySQL->PHP->XML->Flash
Mi problema radica en: “…MySQL->PHP->XML…” Ojalá me puedas ayudar, ya que no hallo la forma de implementar un script que funcione.
:(:(
Saludos!
Solucioné mi problema =)=) solo elimine el XML cambiando mi proceso de salida de este:
MySQL => PHP => XML => SWF
a este:
MySQL => PHP => SWF
Funcionó perfectamente, solo tengo el problema de que no puedo optimizar los scripts jeje, en total son 16 scripts para 8 noticias.
Saludos!
Saludos cordiales uhm
veo q te sirvio de algo q bueno =) despues de tiempo chekeo esta pagina o te hubiese ayudado con el porblema anterior
weno pasaba no mas adios
cualquier duda pasa la voz pues tratare de ayudar
bye !
sacrifica tus sueños para q logres tus sueños…
waaaoooww !!!
esta de poca el codigo..
woowww..
me saco de apuros.. tengo que entregar un proyecto
y encontre este codigo para hacer un XML
woowwww… de nuevo…
te felicito..
saludos…
hola gente
muy bueno el ejemplo, estaba armando algo esactamente igual
para los simplificar el reemplazo de caracteres lo solucione de otra forma
$salida_xml .= “\t\t” . utf8_encode($fila['nombre']) . “\n”;
espero les sirva, saludos
Este codigo hace que s eme muestre en el navegador el xml pero como puedo hacer para que me genere un archivo xml?
hola neseito como eliminar imprimir insertar actualizar un dato en un formulario de php en mysql
bueno para poder crear el fichero xml o sea un archivo y no sólo lo muestre como xml ante el navegador yo lo he solucionado de la siguiente manejra “nótese que sólo estoy mostrando las últimas porciones del código
$salida_xml .= “”;
echo $salida_xml;
//aquí comienza mi modificación
$name_file=”miarchivo.xml”
$file=fopen($name_file,”w+”);
fwrite ($file,$salida_xml);
fclose($file);
?>
en si lo único que se le agrega son las cuatro penúltimas líneas de código y listo, se pudiera mejorar pero ahorita ya son a las cuatro am casi así que lo dejo como apunte y espero les sirva como a mi me sirvió el manual para generar el xml desde la base de datos aunque ya lo modifiqué a mi manera XD
gracias
Saludos, tengo poca experiencia con feed, y me pregunto, si yo hago una modificación es con un php?, porque al asociar este archivo que se crea no se si lo aceptaría con ,? o es mejor configurar el servidor para que procese en extensiones rss comando php??