vanish Posted March 24, 2012 Report Posted March 24, 2012 Am nevoie sa extrag o tabela dintr-un fisier xml, am folosit urmatorul cod:<?php // rss page for Testing - $feed_url = "http://www.raiffeisen.ro/abonare-rss/curs-valutar.xml";$xml = simplexml_load_file($feed_url);// How many items to display $count = 10; // How many characters from each item // 0 (zero) will show them all. $char = 1090; foreach ($xml->channel->item as $item) { if($char == 0){ $newstring = $item->description; } else{ $newstring = substr($item->description, 0, $char); } if($count > 0){ //in case they have non-closed italics or bold, etc ... echo"</i></b></u></a>\n"; echo" $newstring"; } $count--; }?> dar imi ia toata linia de sus pe mine ma intereseaza numai:(si denumirea valutei in fata)sau de unde pot sa i-au sursele sa imi apara asa: Quote
u0m3 Posted March 24, 2012 Report Posted March 24, 2012 (edited) Pai, in primul rand tu tai aiurea tabelul. Ai predefinit un numar de caractere dupa care sa taie, dar ce te faci daca maine, in loc de 4.3771 valoarea va fi 4.0? Te alegi cu 3 caractere aiurea in plus. Si asta doar pentru o valoare.Continutul lui $xml->channel->item[x]->description e un tabel HTML care poate fi tratat ca XML (presupunand ca nu are obscenitati gen <br>).Cat despre exemplul din ultimul screenshot poti sa salvezi datele extrase din mai multe RSS-uri de la diverite surse intr-o baza de date si sa ti le afisezi cum vrei dupa aceea. Oricum este o idee buna sa le salvezi sa le salvezi undeva ca sa nu faci requesturi mereu pe site-ul lor, caci s-ar putea sa ai surprize.Am rescris codul sa fie mai functional. Dar ti-as recomanda sa folosesti o baza de date.<?php // rss page for Testing -$feed_url = "http://www.raiffeisen.ro/abonare-rss/curs-valutar.xml";$schimb = NULL;foreach ($xml->channel->item as $item) { $table = simplexml_load_string($item->description); foreach($table->tr as $tr) { try { $currency = "" . $tr->td[1] . ""; if($currency != "") { // Valorile BNR $schimb["BNR"][$currency] = "" . $tr->td[2] . ""; // Valorile Reiffeisen - self explanatory sper $schimb["Raiffeisen"]["casa"]["cumparare"][$currency] = "" . $tr->td[3] . ""; $schimb["raiffeisen"]["casa"]["vanzare"][$currency] = "" . $tr->td[4] . ""; $schimb["raiffeisen"]["cont"]["cumparare"][$currency] = "" . $tr->td[3] . ""; $schimb["raiffeisen"]["cont"]["vanzare"][$currency] = "" . $tr->td[4] . ""; } } catch (Exception $e) { echo $e; } }}/* In acest moment se pot accesa datele sub forma * $schimb["banca"]["locatie"]["actiune"]["moneda"] * unde: * - banca: numele bancii - momentan BNR sau Raiffeisen * - locatie: * * casa - pentru valorile de schimb la casa * * cont - pentru valorile de schimb in cont (sub 20.000 EUR sau echivalent) aka ultimele 2 coloane din tabel * - moneda: unitatea monetara din tabel; ex: EUR,GBP,JPY,etc * * Apeleaza "print_r($schimb);" pentru a vedea exact structura daca nu e clar din explicatii */ Edited March 24, 2012 by u0m3 Adaugare script_v1 Quote
vanish Posted March 25, 2012 Author Report Posted March 25, 2012 (edited) asta sa fie oare rezultatul ?Array ( [BNR] => Array ( [EUR] => 4.3712 [USD] => 3.2980 [GBP] => 5.2315 [CHF] => 3.6265 [AUD] => 3.4299 [CAD] => 3.2954 [DKK] => 0.5879 [HUF] => 1.4841 [JPY] => 3.9909 [NOK] => 0.5724 [SEK] => 0.4897 [TRL] => 1.8312 [PLN] => 1.0482 [CZK] => 0.1765 [MDL] => 0.2796 [EGP] => 0.5464 [RUB] => 0.1124 ) [Raiffeisen] => Array ( [casa] => Array ( [cumparare] => Array ( [EUR] => 4.3000 [USD] => 3.2400 [GBP] => 5.1100 [CHF] => 3.5500 [AUD] => 3.3800 [CAD] => 3.2500 [DKK] => 0.5750 [HUF] => 1.4500 [JPY] => 3.9400 [NOK] => 0.5600 [SEK] => 0.4780 [TRL] => 0.0000 [PLN] => 0.0000 [CZK] => 0.0000 [MDL] => 0.0000 [EGP] => 0.0000 [RUB] => 0.0000 ) ) ) [raiffeisen] => Array ( [casa] => Array ( [vanzare] => Array ( [EUR] => 4.4200 [USD] => 3.3650 [GBP] => 5.3100 [CHF] => 3.6850 [AUD] => 3.4800 [CAD] => 3.3500 [DKK] => 0.5950 [HUF] => 1.5500 [JPY] => 4.0400 [NOK] => 0.5780 [SEK] => 0.4940 [TRL] => 0.0000 [PLN] => 0.0000 [CZK] => 0.0000 [MDL] => 0.0000 [EGP] => 0.0000 [RUB] => 0.0000 ) ) [cont] => Array ( [cumparare] => Array ( [EUR] => 4.3000 [USD] => 3.2400 [GBP] => 5.1100 [CHF] => 3.5500 [AUD] => 3.3800 [CAD] => 3.2500 [DKK] => 0.5750 [HUF] => 1.4500 [JPY] => 3.9400 [NOK] => 0.5600 [SEK] => 0.4780 [TRL] => 0.0000 [PLN] => 0.0000 [CZK] => 0.0000 [MDL] => 0.0000 [EGP] => 0.0000 [RUB] => 0.0000 ) [vanzare] => Array ( [EUR] => 4.4200 [USD] => 3.3650 [GBP] => 5.3100 [CHF] => 3.6850 [AUD] => 3.4800 [CAD] => 3.3500 [DKK] => 0.5950 [HUF] => 1.5500 [JPY] => 4.0400 [NOK] => 0.5780 [SEK] => 0.4940 [TRL] => 0.0000 [PLN] => 0.0000 [CZK] => 0.0000 [MDL] => 0.0000 [EGP] => 0.0000 [RUB] => 0.0000 ) ) ) ) ultimele doua nu ma intereseaza: $schimb["raiffeisen"]["cont"]["cumparare"][$currency] = "" . $tr->td[3] . ""; $schimb["raiffeisen"]["cont"]["vanzare"][$currency] = "" . $tr->td[4] . "";se pot extrage datele doar pentru primele 2 valute?modific: ? $schimb["Raiffeisen"]["casa"]["cumparare"]["EUR"] = "" . $tr->td[3] . "";imi da rezultate aiurea daca incerc sa scot doar datele pentru primele doua valute Edited March 25, 2012 by vanish Quote
u0m3 Posted March 25, 2012 Report Posted March 25, 2012 Pai le extrage pe toate, dar tu apoi scrii doar ce ai nevoie.Adica la afisare scrii doarecho "Cumparare Euro: " . $schimb["Raiffeisen"]["casa"]["cumparare"]["EUR"] . "\n";echo "Vanzare Euro: " . $schimb["Raiffeisen"]["casa"]["vanzare"]["EUR"] . "\n";echo "Cumparare Dolar American: " . $schimb["Raiffeisen"]["casa"]["cumparare"]["USD"] . "\n";echo "Vanzare Dolar American: " . $schimb["Raiffeisen"]["casa"]["vanzare"]["USD"] . "\n";// etcDemo-ul cu print_r($schimb);era doar ca sa vezi tu structura de stocare daca nu era clar din cod. De afisat le afisezi cum vrei. Quote
vanish Posted March 25, 2012 Author Report Posted March 25, 2012 (edited) nu imi recunoaste indicele "vanzare" doar "cumparare"Notice: Undefined index: vanzareCumparare Euro: 4.3000Notice: Undefined index: vanzare in C:\xampp\htdocs\rs.php on line 43Vanzare Euro: Cumparare Dolar American: 3.2400Notice: Undefined index: vanzare in C:\xampp\htdocs\rs.php on line 45Vanzare Dolar American: <?php// rss page for Testing -$feed_url = "http://www.raiffeisen.ro/abonare-rss/curs-valutar.xml";$xml = simplexml_load_file($feed_url);$schimb = NULL;foreach ($xml->channel->item as $item) { $table = simplexml_load_string($item->description); foreach($table->tr as $tr) { try { $currency = "" . $tr->td[1] . ""; if($currency != "") { // Valorile BNR $schimb["BNR"][$currency] = "" . $tr->td[2] . ""; // Valorile Reiffeisen - self explanatory sper $schimb["Raiffeisen"]["casa"]["Cumparare"][$currency] = "" . $tr->td[3] . ""; $schimb["raiffeisen"]["casa"]["Vanzare"][$currency] = "" . $tr->td[4] . ""; $schimb["raiffeisen"]["cont"]["Cumparare"][$currency] = "" . $tr->td[3] . ""; $schimb["raiffeisen"]["cont"]["Vanzare"][$currency] = "" . $tr->td[4] . ""; } } catch (Exception $e) { echo $e; } }}/* In acest moment se pot accesa datele sub forma * $schimb["banca"]["locatie"]["actiune"]["moneda"] * unde: * - banca: numele bancii - momentan BNR sau Raiffeisen * - locatie: * * casa - pentru valorile de schimb la casa * * cont - pentru valorile de schimb in cont (sub 20.000 EUR sau echivalent) aka ultimele 2 coloane din tabel * - moneda: unitatea monetara din tabel; ex: EUR,GBP,JPY,etc * * Apeleaza "print_r($schimb);" pentru a vedea exact structura daca nu e clar din explicatii */{echo "Cumparare Euro: " . $schimb["Raiffeisen"]["casa"]["Cumparare"]["EUR"] . "\n";echo "Vanzare Euro: " . $schimb["Raiffeisen"]["casa"]["Vanzare"]["EUR"] . "\n";echo "Cumparare Dolar American: " . $schimb["Raiffeisen"]["casa"]["Cumparare"]["USD"] . "\n";echo "Vanzare Dolar American: " . $schimb["Raiffeisen"]["casa"]["Vanzare"]["USD"] . "\n";}?> Edited March 25, 2012 by vanish Quote
u0m3 Posted March 25, 2012 Report Posted March 25, 2012 (edited) Cred ca e o eroare ce tine de faptul ca unele chei sunt lower-case altele sunt sentence-case.In PHP $array["index"] nu e tot una cu $array["Index"]. Verifica acest aspect: de exemplu in blocul if am scris prima oara Raiffeisen iar a dupa aceea raiffeisen. Trebuie sa fie toate la fel.Am recorectat codul:<?php // rss page for Testing -$feed_url = "http://www.raiffeisen.ro/abonare-rss/curs-valutar.xml";$xml = simplexml_load_file($feed_url);$schimb = NULL;foreach ($xml->channel->item as $item) { //echo $item->description; $table = simplexml_load_string($item->description); foreach($table->tr as $tr) { try { $currency = "" . $tr->td[1] . ""; if($currency != "") { // Valorile BNR $schimb["BNR"][$currency] = "" . $tr->td[2] . ""; // Valorile Reiffeisen - self explanatory sper $schimb["Raiffeisen"]["casa"]["cumparare"][$currency] = "" . $tr->td[3] . ""; $schimb["Raiffeisen"]["casa"]["vanzare"][$currency] = "" . $tr->td[4] . ""; $schimb["Raiffeisen"]["cont"]["cumparare"][$currency] = "" . $tr->td[3] . ""; $schimb["Raiffeisen"]["cont"]["vanzare"][$currency] = "" . $tr->td[4] . ""; } } catch (Exception $e) { echo $e; } }}/* In acest moment se pot accesa datele sub forma * $schimb["banca"]["locatie"]["actiune"]["moneda"] * unde: * - banca: numele bancii - momentan BNR sau Raiffeisen * - locatie: * * casa - pentru valorile de schimb la casa * * cont - pentru valorile de schimb in cont (sub 20.000 EUR sau echivalent) aka ultimele 2 coloane din tabel * - actiune: * * cumparare * * vanzare * - moneda: unitatea monetara din tabel; ex: EUR,GBP,JPY,etc * * Apeleaza "print_r($schimb);" pentru a vedea exact structura daca nu e clar din explicatii */echo "Cumparare Euro: " . $schimb["Raiffeisen"]["casa"]["cumparare"]["EUR"] . "\n"; echo "Vanzare Euro: " . $schimb["Raiffeisen"]["casa"]["vanzare"]["EUR"] . "\n"; echo "Cumparare Dolar American: " . $schimb["Raiffeisen"]["casa"]["cumparare"]["USD"] . "\n"; echo "Vanzare Dolar American: " . $schimb["Raiffeisen"]["casa"]["vanzare"]["USD"] . "\n"; Edited March 25, 2012 by u0m3 Adaugat cod complet Quote
vanish Posted March 25, 2012 Author Report Posted March 25, 2012 Multumesc pentru ajutor, solutie corecta. Quote