Skip to content

Preluare curs valutar BNR update

Acum ceva vreme am postat o modalitate rapidă de a preluat cursul valutar complet de la bnr. Azi un prieten căuta o modalitate la fel de rapidă de a prelua cursul valutar, însă doar pentru USD şi EURO, fără să preia toate valutele şi să verifice dacă sunt cele dorite. Cum se poate rezolva lucrul ăsta? Răspunsul este XPath.

 /*
 * initiez clasa DOMDocument, reprezentand fisierul xml incarcat
 */
 $dom = new DOMDocument();
 $dom->preserveWhiteSpace = false;

 /*
 * incarc fisierul xml, specificand adresa completa
 */
 $dom->load( "http://www.bnro.ro/nbrfxrates.xml");
/*
* initializare XPath
*/
$xpath = new DOMXpath($dom);
$xpath->registerNamespace('xsd', 'http://www.bnr.ro/xsd');
 /*
 *  preiau intr-un obiect iterabil (DOMNodeList) lista elementelor ce indeplinesc doleantele mele
 */
 $valute = $xpath->query( "xsd:Body/xsd:Cube/xsd:Rate[@currency='USD' or @currency='EUR']" );
 /*
 * verific daca sunt elemente de acest tip
 */

 if ( $valute )
 {
 $new_valute = array();

 /*
 * in caz afirmativ, iterez prin ele si le preiau intr-un array ce-mi convine
 */
 foreach ( $valute as $valuta )
 {
 $new_valute[$valuta->getAttribute('currency')] = $valuta->nodeValue;
 }
 }

Prin XPath putem selecta rapid doar elementele care corespund anumitor criterii, căutând după o cale (path) indicată de noi. În cazul în care fişierul xml conţine namespace-uri (ca în cazul acesta) ele trebuie anunţate la început, pentru că altfel nu vom primi nici un rezultat. Good luck ;)

last update: 01.2011.

Categories: Articole, PHP.

Tags: , , , ,

Comment Feed

5 Responses

  1. ai uitat sa initializezi $xpath = new DOMXpath($dom);

  2. Ai dreptate. Ce să-i faci, graba asta :D

  3. a… si am uitat ceva… al 2-lea parametru pentru metoda load nu ar trebui sa fie o constanta libxml?

  4. Codul a fost scris acum vreo 2 ani. Nu mai ştiu exact cum era atunci, dar l-am adus la zi ;)

  5. alta treaba :) … felicitari!!



Some HTML is OK

or, reply to this post via trackback.