récupérer une valeur dans un fichier XML

Fat
Invité n'ayant pas de compte PHPfrance

13 févr. 2019, 18:52

Bonjour à tous,
J'ai besoin de récupérer le taux de change de la livre sterling à partir d'un fichier XML en ligne.
Voici le contenu du fichier :

Code : Tout sélectionner

<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"> <script id="tinyhippos-injected"/> <gesmes:subject>Reference rates</gesmes:subject> <gesmes:Sender> <gesmes:name>European Central Bank</gesmes:name> </gesmes:Sender> <Cube> <Cube time="2019-02-12"> <Cube currency="USD" rate="1.1296"/> <Cube currency="JPY" rate="124.70"/> <Cube currency="BGN" rate="1.9558"/> <Cube currency="CZK" rate="25.871"/> <Cube currency="DKK" rate="7.4623"/> <Cube currency="GBP" rate="0.87705"/> <Cube currency="HUF" rate="317.79"/> <Cube currency="PLN" rate="4.3259"/> <Cube currency="RON" rate="4.7414"/> <Cube currency="SEK" rate="10.4725"/> <Cube currency="CHF" rate="1.1381"/> <Cube currency="ISK" rate="136.60"/> <Cube currency="NOK" rate="9.7950"/> <Cube currency="HRK" rate="7.4080"/> <Cube currency="RUB" rate="74.0368"/> <Cube currency="TRY" rate="5.9365"/> <Cube currency="AUD" rate="1.5926"/> <Cube currency="BRL" rate="4.2013"/> <Cube currency="CAD" rate="1.4969"/> <Cube currency="CNY" rate="7.6477"/> <Cube currency="HKD" rate="8.8656"/> <Cube currency="IDR" rate="15891.78"/> <Cube currency="ILS" rate="4.1112"/> <Cube currency="INR" rate="79.8010"/> <Cube currency="KRW" rate="1269.23"/> <Cube currency="MXN" rate="21.7394"/> <Cube currency="MYR" rate="4.6058"/> <Cube currency="NZD" rate="1.6767"/> <Cube currency="PHP" rate="58.858"/> <Cube currency="SGD" rate="1.5334"/> <Cube currency="THB" rate="35.356"/> <Cube currency="ZAR" rate="15.5521"/> </Cube> </Cube> </gesmes:Envelope>
Je cherche depuis une bonne heure comment récupérer le taux de la livre avec simplexml.
Je m'arrache les cheveux car je suis sûr que c'est super simple. Mais je suis une grosse quiche, alors A L'AIDE !!!

Merci à ceux qui aideront la Quiche.

Avatar du membre
Mammouth du PHP | 1609 Messages

13 févr. 2019, 22:23

Salut, y a surement plus simple mais avec les namespaces et compagnie... et je suis pas un spécialiste de la lecture de fichiers xml ^^
$content = file_get_contents('file.xml');
preg_match('`<Cube>[\S\s]*<\/Cube>`', $content, $matches);
$xml = simplexml_load_string($matches[0]);
$currency = $xml->xpath("//Cube[@currency='GBP']")[0];
echo $currency['rate']."\n";
PS : je n'arrivais pas à trouver le bon xpath pour extraire le noeud du document complet alors j'ai décidé d'extraire tous les noeuds Cube avant de les charger avec simple xml et comme ça le xpath fonctionne. ^^

Sinon y avait cette solution toute simple, mais elle me plait moins car on fait une boucle...
$xml = simplexml_load_file('file.xml');
foreach ($xml->Cube->Cube->Cube as $cube)
  if ($cube['currency'] == 'GBP')
    break ;
echo $cube['rate']."\n";
Développeur web depuis + de 20 ans