Está usted en Indice > Maletin > Artículos > ¿Qué podemos hacer con XML y PHP ?.
Construcción
Maletín
Utilidades
Cursos
Promoción
Rentabilidad
Zona Novatos
Foros
Acceso a tu cuenta

¿Qué podemos hacer con XML y PHP ? (2)

El siguiente paso es cargar nuestro archivo XML en una estructura que podamos trabajar con PHP de forma comoda, para esta tarea vamos a utilizar las funciones dom que vienen implementadas a partir de la versión 4 de PHP. Concretamente usaremos:

  • domxml_open_mem : Crea un objeto DOM desde un documento XML
  • document_element : Crear un nuevo nodo de tipo elemento
  • get_elements_by_tagname: Obtiene elementos por el nombre de etiqueta
  • get_content : Obtiene el contenido del nodo

$tagnames = array ("titulo","autor","cuerpo");

if (!$xml = domxml_open_mem($contenido))
{
echo "Ha ocurrido un error al procesar el documento<strong> "$ruta_fichero"</strong> a XML <br>";
exit;
}
else
{
$raiz = $xml->document_element();

$tam=sizeof($tagnames);

for($i=0; $i<$tam; $i++)
{
$nodo = $raiz->get_elements_by_tagname($tagnames[$i]);
$j=0;
foreach ($nodo as $etiqueta)
{
$matriz[$j][$tagnames[$i]]=$etiqueta->get_content();
$j++;
}
}

Analicemos más detenidamente este último trozo de código a ver que es lo que realmente hace. Para empezar hemos creado un array con los campos que contiene cada noticia en la variable "tagnames". A continuación cargamos la variable contenido en un objeto DOM, en el caso de que todo haya ido bien extraemos el nodo raiz, en nuetro caso "bloque". El siguiente paso es calcular el numero de campos que obtendremos de cada noticia, para ello utilizamos la función sizeof que nos devuelve el tamaño del array.

Es ahora cuando extraemos la verdadera información del documento XML. Esta información la vamos a introducir en una matriz para que nos sea más simple trabajar con los datos. De forma que matriz quedase algo así:

indice Nombre Columna titulo autor cuerpo
0 Hola Caracola KaoS Olla Kaitos a Luisete
1 Nuevo articulo en desarrolloweb Raul Jeje hola, aqui estamos

El primer bucle extrae las etiquetas de los nodos (primero titulo, despues autor y luego cuerpo).
El foreach se encarga de sacar una a una las etiquetas de cada una de las noticias, por lo que primero extrae "Hola Caracola" y en la segunda iteración "Nuevo articulo en desarrolloweb". De este modo vamos guardando en nuestra matriz los datos extraidos.

En la segunda iteración(repetición) del bucle for cogeremos la etiqueta autor, y en el foreach extraeremos los valores para introducirlos en nuetra matriz. Y así hasta terminar. ¡Lo mejor de todo es que de esto se encarga nuestro propio bucle!, nosotros solo tendremos que preocuparlos de declarar el array de etiquetas.

Bueno para que nos sea más comodo podemos crear una función a la que le pasaremos el archivo XML que queremos que nos lea y nos devuelva una matriz con los datos, haciendo así nuestro trabajo más limpio y eficiente. El código resultante sería:

function CargarXML($ruta_fichero)
{
$contenido = "";
if($da = fopen($ruta_fichero,"r"))
{
while ($aux= fgets($da,1024))
{
$contenido.=$aux;
}
fclose($da);
}
else
{
echo "Error: no se ha podido leer el archivo <strong>$ruta_fichero</strong>";
}

$contenido=ereg_replace("á","a",$contenido);
$contenido=ereg_replace("é","e",$contenido);
$contenido=ereg_replace("í","i",$contenido);
$contenido=ereg_replace("ó","o",$contenido);
$contenido=ereg_replace("ú","u",$contenido);
$contenido=ereg_replace("Á","A",$contenido);
$contenido=ereg_replace("É","E",$contenido);
$contenido=ereg_replace("Í","I",$contenido);
$contenido=ereg_replace("Ó","O",$contenido);
$contenido=ereg_replace("Ú","U",$contenido);
$contenido=ereg_replace("Ñ","NI",$contenido);
$contenido=ereg_replace("ñ","ni",$contenido);

$tagnames = array ("titulo","autor","cuerpo");

if (!$xml = domxml_open_mem($contenido))
{
echo "Ha ocurrido un error al procesar el documento<strong> "$ruta_fichero"</strong> a XML <br>";
exit;
}
else
{
$raiz = $xml->document_element();

$tam=sizeof($tagnames);

for($i=0; $i<$tam; $i++)
{
$nodo = $raiz->get_elements_by_tagname($tagnames[$i]);
$j=0;
foreach ($nodo as $etiqueta)
{
$matriz[$j][$tagnames[$i]]=$etiqueta->get_content();
$j++;
}
}

return $matriz;
}
}

Bueno, pues esto ya está casi todo listo, ya hemos cargado una matriz con el contenido de un archivo XML, por lo que ahora solo nos queda mostrar la información que queramos. Vamos a ver en un pequeño código como hacerlo.

$matriz=CargarXML("noticias.xml");

$num_noticias=sizeof($matriz);
for($i=0;$i<$num_noticias;$i++)
{
echo '
<table border=1>
<tr><td align=center>'.$matriz[$i]["titulo"].'</td></tr>
<tr><td>'.$matriz[$i]["cuerpo"].'</td></tr>
<tr><td align=right >'.$matriz[$i]["autor"].'</td></tr>
</table><br>
';
}

Voilà, ya tenemos nuestro primer ejemplo de XML+PHP. Aquí podeis ver el ejemplo funcionando:archivo xml y archivo xml formateado.
Bueno esto ha sido todo por hoy, espero que os haya sido de utilidad el artículo.


Autor: Raúl Jiménez Ortega
http://www.quickwebdeluxe.com

Usuarios que han visto este tema también han visto...

- Secretos de los buscadores
- Buena vida con XHTML
- Cómo vender publicidad en páginas web
- Cómo conseguir publicidad gratuita y efectiva para tu proyecto
- Webmasters al por mayor, llegar y llevar


Versión imprimible - Versión imprimible de este documento
Enviar e-mail - Enviar por e-mail este documento
Publicidad

Información legal | Política de Privacidad | Contacte con nosotros

Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.


Página generada el 21-11-2008 a las 14:18:31