En una ocasión para un trabajo tenía que sacar datos de un xml y usarlos para realizar unas operaciones, lo primero que se me pasó por la mente fue usar las funciones para manejo de archivos normales en Php, las populares como fread, fclose, fwrite; pero obviamente es un problema grandísimo porque hay que realizar un algoritmo que te determine etiqueta por etiqueta del xml. Pero ajám, nuestro señor, el amigo Google, me ayudó a encontrar una solución rápida, fácil y cómoda para leer datos de archivos xml.
Bueno, pero ahora sí, entrando en materia, lo que hay que hacer es crear dos archivos, el xml a leer y el .php que hará el proceso
Lo nuevo
* simplexml_load_string: Toma una cadena xml y devuelve un objeto de la clase SimpleXMLElement, con las propiedades del xml leído. Ej.:
// Lo que convierte es algo así: SimpleXMLElement Object( [nombre] => David Fernando [telefono] => 311 123 4567 )
*count: Como vimos en temas anteriores, lo que hace count, es precisamente contar los elementos que contiene un arreglo; en este ejemplo, la etiqueta
El XML
Llamaremos a nuestro archivo directorio.xml, este será el que usaremos para la lectura.
<?xml version="1.0" encoding="utf-8"?> <directorio> <persona> <nombre>David Fernando</nombre> <telefono>311 123 4567</telefono> </persona> <persona> <nombre>Viviana Marcela</nombre> <telefono>300 987 6543</telefono> </persona> </directorio>
Nuestro Php en función
Y para que todo esto funcione creamos un archivo llamado directorio.php, así veremos en funcionamiento la lectura de nuestro XML.
Si notamos de todas formas no estamos dejando de lado las funciones de manipulación de archivos generales. Cuando ya tenemos el string listo como xml, lo que hacemos entonces es crear un ciclo para que nos muestre una a una las personas que se encuentran en el directorio. (La tabla es para que se vea un poco ordenado).
<?php
$url = "persona.xml";
$contenido_xml = "";
if($d = fopen($url, "r")){
while ($aux= fgets($d, 1024)){
$contenido_xml .= $aux;
}
fclose($d);
}else{
echo "No se pudo abrir el XML";
}
$xml = simplexml_load_string($contenido_xml);
?>
<table align="center" border="1">
<tr><td>Nombre</td><td>Telefono</td>
<?php
for($i=0; $i<count($xml->persona); $i++)
echo '<tr><td>'.$xml->persona[$i]->nombre.'</td><td>'.$xml->persona[$i]->telefono.'</td></tr>';
?>
</table>
Terminamos!
Lo subimos a nuestro servidor ya sea local o remoto y, bueno ahí está la solución a nuestros problemas con las lecturas de archivos xml. Y por supuesto la recomendación de siempre, ir a la Fuente


Francisco, no entiendo como es el orden los datos que me presentas, por favor, regalame el enlace del xml para poderte colaborar.
He seguido tu ejemplo para aplicarlo en un caso en particular, pero lamentablemente la estructura del XML cambia (y no puedo modificarla, puesto que es informacion que plublican en otra web)
me peudes orientar como puedo aplicar tu ejemplo para mi caso en particular:
2.0-4.0
1.98
189.6757
3.00
n.d.
3.77
14/05/2010
2.978
11/05/2010
2.950
15/05/2010
1,968.10
-12.59