Question

J'ai besoin de conversion de devises, l'euro au dollar.
La banque centrale européenne fournit les taux ici:
http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
Je peux obtenir le taux de USD en utilisant le premier noeud, mais s'ils changent l'ordre
Ai-je besoin de quelque chose plus fiable? Je ne sais pas comment ..

$xml = @simplexml_load_file('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml');
echo "dollar: " . $xml->Cube->Cube->Cube[0]->attributes()->rate;
Était-ce utile?

La solution

Il suffit d'utiliser XPath pour obtenir un nœud avec l'attribut @currency égal à « USD », qui fera l'affaire.

$xref  = simplexml_load_file('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml');
$nodes = $xref->xpath('//*[@currency="USD"]');

echo $nodes[0]['rate'];

Autres conseils

Ils fournissent un exemple de code à cette page:

Il suffit de cliquer sur l'onglet Pour les développeurs

Il y a aussi un (unmaintained) PEAR Forfait Taux de change

Vous ne devriez pas la peine si elles changent l'ordre. Si elles le font, ils le font.

Vous pouvez itérer à travers des objets SimpleXML avec un foreach

foreach( $xml->Cube->Cube as $cube ) {
    if( isset( $cube->attributes()->rate ) ) {
         $rate = $cube->attributes()->rate; 
    }    
}

Vous pouvez utiliser XPath

$rate = $xml->xpath("//Cube[currency='USD']/rate")

Vous avez raison. À l'heure actuelle, vous assumez l'entrée 0th à USD et si les changements d'ordre dans l'avenir de votre hypothèse échoue. Donc, pour rendre votre application indépendante de l'ordre, vous pouvez vérifier l'attribut currency dans une boucle. Le moment où vous trouvez une valeur avec "USD" vous pouvez obtenir son attribut rate correspondant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top