utilización de la extensión SimpleXML en 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.
