articulos php

articulos » php

utilización de la extensión SimpleXML en php

votar
Enviado el: 03/09/2011 - a la categoria: php

La extensión SimpleXML de php, nos permite cargar archivos xml en un array y poder manejarlos según nuestras necesidades. Lo mejor es explicar su funcionamiento con un ejemplo, para ello, vamos a utilizar un sistema online que ofrece mediante xml la cotización de las diversas divisas del mundo, por lo que podremos consultar sus diferentes valores y calcular el precio de un producto en cualquier moneda.


Este ejemplo, puede ser útil para una tienda online, que muestra sus precios en euros y dólares, haciendo la conversión de forma automática. Para obtener las cotizaciones, a mi me parece que utilizar el Banco Central Europeo es una fuente bastante fiable...


Para ello, haremos lo siguiente:


<?php
   $urlservicio = 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml';
?>

Con esto, obtenemos un archivo xml, con el siguiente esquema:


<Cube>
   <Cube time="2011-09-02">
      <Cube currency="USD" rate="1.4255"/>

Ahora, lo que tenemos es que identificar la moneda, es este caso sería el dolar y tal y como vemos en nuestro esquema, cada moneda tiene dos campos: currency y rate. El primero nos indica el nombre de la moneda y el segundo el valor.


Ahora, lo que hacemos es parsear esta url, con SimpleXML e indicarle la ruta donde debe buscar los datos que queremos:


<?php
   $xml = simplexml_load_file($urlservicio);
   $cube = $xml->Cube->Cube->Cube;    
?> 

Con esto, lo que le estamos diciendo, es que queremos la tercera etiqueta cube del xml. Ahora, en la variable $cube, tenemos todos los campos currency y rate del archivo, por lo que tenemos que recorrer el array y buscar el que queremos, que en este caso es el dolar: USD.


foreach ($cube as $item) {
   $attrs = $item->attributes();
   if ($attrs['currency'] == "USD") {
      $cambio = (float)$attrs['rate'];
      print $cambio;    
   }
}

Lo que hemos hecho, ha sido recorrer el array, y después, hemos creado una nueva variable $attrs, en la que hemos guardado los dos atributos que tiene cada campo: moneda y valor, posteriormente, comparamos el atributo currency con el atributo del dolar: USD y si coinciden, imprimimos el valor de la moneda.


Poniendo todo junto, y en una función, quedaría algo así:


<?php
function convertir_moneda($moneda){
    $cambio = false;
    $urlservicio = 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml';        
    $xml = simplexml_load_file($urlservicio);
    $cube = $xml->Cube->Cube->Cube;            
    foreach ($cube as $item) {
            $attrs = $item->attributes();
            if ($attrs['currency'] == $moneda) {
                $cambio = (float)$attrs['rate'];
                return $cambio;    
            }
    }      
    return $cambio;    
}
?>

La forma de utilizar la función sería:


<?php
convertir_moneda("USD");
?>

Y nos devolvería el valor del dolar.

Enviado por: