Foros del Web » Programando para Internet » PHP »

Leer xml con php

Estas en el tema de Leer xml con php en el foro de PHP en Foros del Web. Hola, no sé como leer una parte de un xml. Me he basado en este artículo de: dessarrolloweb/articulos/2491.php (es que todavía no puedo publicar links ...
  #1 (permalink)  
Antiguo 04/09/2009, 09:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 11
Antigüedad: 14 años, 8 meses
Puntos: 0
Leer xml con php

Hola,
no sé como leer una parte de un xml.

Me he basado en este artículo de: dessarrolloweb/articulos/2491.php (es que todavía no puedo publicar links en el foro)

y todo funciona perfectamente, pero he añadido más elementos en el xml y me pierdo a la hora de leerlo con php.

El archivo xml, siguiendo el del artículo, sería:
Código:
<?xml version="1.0" encoding="ISO-8859-1"?> 
<bloque> 
<noticia> 
  <titulo>Hola Caracola </titulo> 
  <autor>KaoS</autor> 
  <cuerpo>Olla Kaitos a Luisete</cuerpo> 
  <fotos>
       <foto1>foto01.jpg</foto>
       <foto2>foto02.jpg</foto>
  </fotos>
</noticia> 
<noticia> 
  <titulo>Nuevo articulo en desarrolloweb </titulo> 
  <autor>Raul</autor> 
  <cuerpo>Jeje hola, aqui estamos </cuerpo> 
  <fotos>
       <foto1>fotox.jpg</foto>
       <foto2>fotoy.jpg</foto>
       <foto3>fotoz.jpg</foto>
  </fotos>
</noticia> 
</bloque>
en rojo lo que yo he añadido.

y la función que lo lee:
Código PHP:
function CargarXML($ruta_fichero){ 
  
$contenido ""
  if(
$da fopen($ruta_fichero,"r")) { 
      while (
$auxfgets($da,1024)) { 
          
$contenido.=$aux;
     } 
   
fclose($da); 
   } else { 
      echo 
"Error: no se ha podido leer el archivo <strong>$ruta_fichero</strong>";
   } 

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

  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
  }

Esto me lee:
matriz[0] = Array
matriz[1] = Array

Y leyendo uno de los Arrays:
matriz[0][titulo] = Hola Caracola
matriz[0][autor] = KaoS
matriz[0][cuerpo] = Olla Kaitos a Luisete
matriz[0][fotos]=foto01.jpg foto02.jpg

No sé como leer cada tag de las fotos como otro array más para poder recorrerlo y saber quantas fotos hay para mostrarlas. He probado dentro del foreach ($nodo as $etiqueta), pero obviamente algo se me escapa.

Desde ya, gracias por vuestra ayuda!
Saludos!
  #2 (permalink)  
Antiguo 04/09/2009, 10:49
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Leer xml con php

Bueno, yo no me meti con tu codigo a fondo, pero para profundizar la seleccion usas esto:

$nodo = $raiz->get_elements_by_tagname("fotos")->item(0)->childNodes
o
$nodo = $raiz->get_elements_by_tagname("fotos")->item(0)->childNodes->item($i)

En "fotos" necesitas usar item(0) porque siempre vas a tener un array como respuesta.

De cualquier manera, hay un foro especifico de xml.

Otra cosa: estas usando php 5 o 4?
  #3 (permalink)  
Antiguo 16/09/2009, 06:50
 
Fecha de Ingreso: agosto-2009
Mensajes: 11
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Leer xml con php

Hola Mayid,

gracias por tu ayuda y perdona que haya tardado tanto, no he podido conectarme antes.

Efectivamente siguiendo tus instrucciones conseguí que 'fotos' fuera un array i así poder ir guardando en ella los items.
Pero encontré una solución más fácil, al menos para mí, al no tener siempre el mismo número de fotos. Decidí poner en el xml solamente:

<fotos>nombre_carpeta_donde_están_las_fotos</fotos>

y luego con php ya miro quantas fotos hay en ese directorio y las muestro como me interesa. De esta forma sólo tengo que leer el xml con el código php original que puse aquí.

Gracias y saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:54.