Foros del Web » Programando para Internet » PHP »

ayuda con SimpleXML

Estas en el tema de ayuda con SimpleXML en el foro de PHP en Foros del Web. hola a todos tengo un xml con esta estructura (yo no genero el xml, solo lo uso) <img> <img1> <proimg1>3-2027-1.gif</proimg1> </img1> <img2> <proimg2>3-2027-2.gif</proimg2> </img2> <img3> ...
  #1 (permalink)  
Antiguo 27/01/2011, 09:55
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
ayuda con SimpleXML

hola a todos tengo un xml con esta estructura (yo no genero el xml, solo lo uso)
<img>
<img1>
<proimg1>3-2027-1.gif</proimg1>
</img1>
<img2>
<proimg2>3-2027-2.gif</proimg2>
</img2>
<img3>
<proimg3>3-2027-3.gif</proimg3>
</img3>
</img>
pero resulta que la cantidad de entradas de imgX es variable, pueden ser 0..5, como
puedo iterar por las etiquetas imgX sin saber su contenido

$xml = simplexml_load_file('fichero.xml');
echo $xml->img->img1 me muestra el valor

pero como iterar sin saber cuantas entradas existen ???
  #2 (permalink)  
Antiguo 27/01/2011, 10:25
Avatar de odiseus  
Fecha de Ingreso: enero-2011
Mensajes: 109
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: ayuda con SimpleXML

Puedes utilizar lo siguiente:

Código PHP:
foreach ($xml->children() as $child)
{
    foreach(
$child->children() as $nombreImagen)
    {
        echo 
$nombreImagen."<br>";
    }

El ejemplo está preparado para que funcione, un saludo!
  #3 (permalink)  
Antiguo 27/01/2011, 10:26
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: ayuda con SimpleXML

Es facil Mira y aprende:

Estaria bueno que la estructura fuera:

<imgs>
<img>
<proimg>xxx</proimg>
</img>
<img>
<proimg>xxx</proimg>
</img>
<img>
<proimg>xxx</proimg>
</img>
</imgs>

al tener cada elemento el mismo nombre lo recorres mas facil.
asi aprochas la potencia de xml,
si no tenes que sacar todos valor con un array e imprimirlos otra ves.


$MP3= simplexml_load_file('mp3.xml');

ServicioXML($MP3);

public function ServicioXML($MP3){
foreach($MP3->img as $img ){
echo $img->proimg.' <br />;
}

}
  #4 (permalink)  
Antiguo 27/01/2011, 10:30
Avatar de odiseus  
Fecha de Ingreso: enero-2011
Mensajes: 109
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: ayuda con SimpleXML

Bueno, como dice patriarca sería lo mejor así, pero como ha dicho el xml no lo crea ella así que vamos a adaptarnos a su pregunta .
  #5 (permalink)  
Antiguo 27/01/2011, 10:51
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: ayuda con SimpleXML

jaj es el. de ismael viamontes, gracias x las respuestas !!
  #6 (permalink)  
Antiguo 27/01/2011, 10:56
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: ayuda con SimpleXML

jaj es el. iviamontes de ismael viamontes, gracias x las respuestas !!
  #7 (permalink)  
Antiguo 27/01/2011, 11:14
Avatar de odiseus  
Fecha de Ingreso: enero-2011
Mensajes: 109
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: ayuda con SimpleXML

Lo siento
  #8 (permalink)  
Antiguo 27/01/2011, 11:16
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: ayuda con SimpleXML

y si e xml fuera asi, como logro entonces obtener el valor de imgX->proimgX, sin saber la cantidad de iteraciones que tengo que hacer ???

<img>
<img1>
<fo_desc1>texto</fo_desc1>
<id1>foto_1</id1>
<proimg1>3-2027-1.gif</proimg1>
</img1>
<img2>
<fo_desc2>texto</fo_desc1>
<id2>foto_2</id1>
<proimg2>3-2027-2.gif</proimg2>
</img2>
<img3>
<fo_desc3>texto</fo_desc1>
<id3>foto_3</id1>
<proimg3>3-2027-3.gif</proimg3>
</img3>
</img>
  #9 (permalink)  
Antiguo 27/01/2011, 11:17
Avatar de odiseus  
Fecha de Ingreso: enero-2011
Mensajes: 109
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: ayuda con SimpleXML

Así lo mío ya no sirve, de todas formas el XML ese estará bien escrito pero no es lógico, lo lógico es que dentro de los anidados no tuvieran el numero, porque no hace falta.
  #10 (permalink)  
Antiguo 27/01/2011, 11:19
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: ayuda con SimpleXML

tenes toda la razón, pero es así como viene el xml, como pudiera hacerlo entonces ???
please !!!!
  #11 (permalink)  
Antiguo 27/01/2011, 13:29
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: ayuda con SimpleXML

trabajando un pokito tu problema,

Código PHP:
Ver original
  1. $mp3= simplexml_load_file('mp3.xml');
  2.     echo 'Cantidad de items: '.count($mp3).'<br >';
  3.     for ($index = 1; $index <= count($mp3); $index++) {
  4.         $a='img'.$index;
  5.         $c='proimg'.$index;
  6.         $d='fo_desc'.$index;
  7.         $e='id'.$index;
  8.         echo $mp3->$a->$c.' * <br />';
  9.         echo $mp3->$a->$d.' * <br />';
  10.         echo $mp3->$a->$e.' * <br />';
  11.     }

Lo probe y funciona

*************adaptado a tus requerimientos.....................

Última edición por Patriarka; 27/01/2011 a las 13:38
  #12 (permalink)  
Antiguo 27/01/2011, 13:48
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: ayuda con SimpleXML

hmm bueno lo copie y no me funciona, es decir me imprime un 1, que no es eso lo que deberia de imprimir
  #13 (permalink)  
Antiguo 27/01/2011, 13:54
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: ayuda con SimpleXML

Pasa por el área de aportes para que veas un tema que te puede ayudar con lo que estás pidiendo y te puedas desenvolver.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #14 (permalink)  
Antiguo 27/01/2011, 14:07
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: ayuda con SimpleXML

ok, abimaelrc gracias
Patriarka muchas gracias para vos también, ya me funciona.. gracias
  #15 (permalink)  
Antiguo 27/01/2011, 14:08
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: ayuda con SimpleXML

Cita:
Iniciado por iviamontes Ver Mensaje
hmm bueno lo copie y no me funciona, es decir me imprime un 1, que no es eso lo que deberia de imprimir
Me olvide de decirte que en el ultimo ejemplo que pusiste estaban mal cerrados los nombres de algunos elemnetos xml, seguro por eso encontraba el primero , te devolvio 1, y luego encontro un error y termino la ejecion.

Aca lo que yo probe y funciono:

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <img>
  3. <img1>
  4. <fo_desc1>texto</fo_desc1>
  5. <id1>foto_1</id1>
  6. <proimg1>3-2027-1.gif</proimg1>
  7. </img1>
  8. <img2>
  9. <fo_desc2>texto</fo_desc2>
  10. <id2>foto_2</id2>
  11. <proimg2>3-2027-2.gif</proimg2>
  12. </img2>
  13. <img3>
  14. <fo_desc3>texto</fo_desc3>
  15. <id3>foto_3</id3>
  16. <proimg3>3-2027-3.gif</proimg3>
  17. </img3>
  18. </img>
Código PHP:
Ver original
  1. $mp3= simplexml_load_file('../../import/mp3.xml');
  2.     echo 'Cantidad de items: '.count($mp3).'<br >';
  3.     for ($index = 1; $index <= count($mp3); $index++) {
  4.         $a='img'.$index;
  5.         $c='proimg'.$index;
  6.         $d='fo_desc'.$index;
  7.         $e='id'.$index;
  8.         echo $mp3->$a->$c.' * <br />';
  9.         echo $mp3->$a->$d.' * <br />';
  10.         echo $mp3->$a->$e.' * <br />';
  11.     }

Fijate en tu configuracion que te muestre todos los errores.
  #16 (permalink)  
Antiguo 27/01/2011, 14:11
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: ayuda con SimpleXML

Patriarka tenias razón, muchas gracias
  #17 (permalink)  
Antiguo 27/01/2011, 14:27
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: ayuda con SimpleXML

si mira
php5 tiene una clase SimpleXml, que te prmite todo ese trabajo busca info sobre ella..
de todas formas aca te pongo lo basico

$xml = simplexml_load_file('tu url');
ahora tenes en $xml el contenido de ese xml
y ahora iteras por tus nodos...
en este mismo post, si te fijas hay codigo que te puede servir
supon que tu xml sea esto

<img>
<img1>
<proimg1>3-2027-1.gif</proimg1>
</img1>
<img2>
<proimg2>3-2027-2.gif</proimg2>
</img2>
<img3>
<proimg3>3-2027-3.gif</proimg3>
</img3>
</img>

para llegar el nodo <img2> <proimg2>
debes hacer echo $xml->img->img2->proimg2;
  #18 (permalink)  
Antiguo 27/01/2011, 14:57
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: ayuda con SimpleXML

Esta muy bien lo que das como ejemplo, pero esta que cada modulo, metodo o clase que hagas
te sirva para todas tus aplicaciones. los casos de datos fijos son faciles de resolver.

A mi me toco esto:
*recibir un xml con N productos y actualizar con esos datos los productos de mi base de datos,
*generar un xml a partir de una orden de compras con todos sus N productos y enviarlo.

En solo dos items tuve que aplicar nada estatico sino todo dinamico, sin saber nunca cuantos productos recibia ni cuantos tendria que enviar.
  #19 (permalink)  
Antiguo 27/01/2011, 15:01
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: ayuda con SimpleXML

si bueno la pregunta no especificaba tanto, por cierto alguna clase para el manejo de xml ???
es decir alguna implementacion basada en SimpleXml
  #20 (permalink)  
Antiguo 27/01/2011, 15:31
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: ayuda con SimpleXML

En general no hay muchos secretos, podes usar lo que hay en php.net/manual/es/book.simplexml.php
Con eso te bastaria para resolver cualquier cosa,. tene en cuenta que para cada problema no siempre es la misma solucion.
Como respuesta te dejo esto:
Te recomiendo crear una clase con los metodos comunes a las aplicaciones que siempre usas.
crea tu propia libreria, vas a ver que te va a sevir siempre.......
  #21 (permalink)  
Antiguo 27/01/2011, 16:06
 
Fecha de Ingreso: enero-2011
Mensajes: 15
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: ayuda con SimpleXML

Yo tengo un problema.

Tengo este link: http://demo:[email protected]/soccer/get_matches_live?now_playing=yes&minutes=yes
El cual me regresa un archivo XML, sin embargo, no sé cómo pasarlo a una variable de php y manipularlo, ¿cómo puedo hacer eso enviándole los parámetros?

¡Gracias!
  #22 (permalink)  
Antiguo 27/01/2011, 16:15
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: ayuda con SimpleXML

Mandame un ejemplo del archivo.xml que te llega y lo vemos.
Y que queres hacer exactamente con esos datos.

Para mañana te prometo la solucion, ya termino mi jornada laboral

gracias
  #23 (permalink)  
Antiguo 27/01/2011, 16:21
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: ayuda con SimpleXML

Mientras, vuelvo a recomendar que pases por el área de aportes para que aprendas a desenvolverte.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #24 (permalink)  
Antiguo 27/01/2011, 16:32
 
Fecha de Ingreso: enero-2011
Mensajes: 15
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: ayuda con SimpleXML

En realidad, lo único que necesito es leer y guardar ese XML.

El problema radica que puedes modificar los parámetros para que te regrese distinta información y te regresa el archivo pero no como un .xml sino un xml impreso en la página.

No sé si me explique...

Etiquetas: simplexml
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 11:07.