Page 1 sur 1

récupérer une valeur dans un fichier XML

Posté : 13 févr. 2019, 18:52
par Fat
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.

Re: récupérer une valeur dans un fichier XML

Posté : 13 févr. 2019, 22:23
par Saian
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";