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.
ai uitat sa initializezi $xpath = new DOMXpath($dom);
Ai dreptate. Ce să-i faci, graba asta
a… si am uitat ceva… al 2-lea parametru pentru metoda load nu ar trebui sa fie o constanta libxml?
Codul a fost scris acum vreo 2 ani. Nu mai ştiu exact cum era atunci, dar l-am adus la zi
alta treaba
… felicitari!!