Extraer datos XML

suaveSHOW

Buenas, esta tarde me dio por hacer un script que saque datos de un XML con el siguiente contenido de ejemplo:

<contacto>
	<nombre>Sergio</nombre>
	<edad>17</edad>

</contacto>
<contacto>
	<nombre>Pepe</nombre>
	<edad>34</edad>

</contacto>

Y consigo sacar El nombre, y la edad, pero el problema esta en que solo la saco del primero, las siguientes ya nada, supongo que tendré que usar un for each, pero mis conocimientos sobre este son prácticamente nulos, podría alguien ayudarme por favor! :palm:

LOc0

Como veo que lo que quieres es trastear obviaré los millones de parsers de XML que existen para casi cualquier lenguaje y te daré una recomendación básica para hacerlo a pelo. En una palabra -> PILA.

Pequeña "explicación":

Con POO es más "intuitivo", pero puedes usar cualquier lenguaje que soporte tipos de datos "complejos". C mismo te vale. Tú tienes una pila de objetos inicialmente vacía. Cuando leas la etiqueta <contacto> apilas un objeto de tipo "Etiqueta-contacto" y sigues leyendo. Cuando llegues a la etiqueta <nombre> lo apilas como un objeto de tipo "Etiqueta-nombre" Cuando te leas el nombre lo apilas como un objeto de tipo "cadena" Luego al llegar a la etiqueta de cierre de nombre te vas a la pila y desapilas 2 elementos que serán la cadena que contiene el nombre y el objeto etiqueta de apertura de nombre. Te creas un objeto de tipo "Nombre" y lo apilas. Luego con la edad lo mismo. Al llegar a la etiqueta de cierre de contacto la pila debería contener esto:

[EDAD]
[NOMBRE]
[Apertura de contacto]

Entonces como tú sabes de antemano que un contacto tiene una edad y un nombre sacarás de la pila las 3 cosas, te crearás un objeto de tipo "Contacto" y lo apilarás. Repites lo mismo con el siguiente contacto y al final te quedará un pila que sólo debería contener objetos de tipo "Contacto"

[Contacto-n]
[Contacto2]
[Contacto1]

Para saber cuántas cosas desapilar cada vez que encuentres una etiqueta de cierre es necesario tener definida la gramática del XML, lo que se conoce como DTD del XML -> http://es.wikipedia.org/wiki/Definici%C3%B3n_de_tipo_de_documento

Salu2 ;)

C

#1 normalmente hago uso del objeto msxml para abrir el archivo .xml (hablo desde el IDE que uso que no es muy conocido) y utilizo una función recursiva para extraer los datos.

suaveSHOW

Primero especificar que el lenguaje que estoy usando es PHP, que soy nivel amateur y el script es para sacar info del XML de steamcommunity con info del perfil.

Voy a pegar el código aquí para que veáis la chapuza de código que hice.

spoiler
LOc0

I love PHP :D Para usar esto necesitas PHP5

<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<contactos>
<contacto>
<nombre>Sergio</nombre>
<edad>17</edad>
</contacto>
<contacto>
<nombre>Pepe</nombre>
<edad>34</edad>
</contacto>
</contactos>
XML;

$xml = new SimpleXMLElement($xmlstr);

echo $xml->contacto[0]->nombre; // Sergio

?>
<?php

$xml = simplexml_load_file('http://steamcommunity.com/profiles/76561197977932147?xml=1');
 
echo $xml->steamID64;

echo $xml->groups->group[0]->groupID64;

?>

Más info por supuesto en -> http://www.php.net/manual/en/simplexml.examples-basic.php

Salu2 ;)

suaveSHOW

Gracias, mañana le echaré un ojo que ahora no puedo y cuento como me fué :)

Soltrac

Evidentemente el script es un copy paste q has hecho de random web. Modificarlo para que recorra todo es trivial. No me parece mal el hecho, pero si no puedes hacerlo tú solo es que estás empezando la casa por el tejado.

suaveSHOW

#7 Si lo dices por mi, no lo he copiado, tampoco es una maravilla como para parecer un copy&paste.

Usuarios habituales

  • suaveSHOW
  • Soltrac
  • LOc0