| Rubrika Php / mysql
Parsovanie XML súboru v PHP
XML je dnes už relatívne rozšírená forma sprístupňovania dynamicky
generovaného obsahu pre externých partnerov. Každý väčší aj menší web
má napríklad svoje RSS, čo je tiež XML formátovaný súbor. Pomocou vhodne
vygenerovaného XML feedu dokážeme napríklad zobraziť spravodajstvo
tlačovej agentúry, najnovšie ponuky pracovného portálu či aktuálnu ponuku
autobazáru. Všetko samozrejme presne napasované do nášho dizajnu. Princíp
je jednoduchý – všetok takýto externý obsah sa naťahuje z dynamicky
generovaného XML súboru, ktorý je aktualizovaný zo strany poskytovateľa
služby.
Ako príklad si zoberme RSS feed tlačovej
agentúry SITA. Na stránke http://www.webnoviny.sk/…-Kanaly.html
nájdeme zoznam všetkých feedov, ktoré SITA ponúka, majú ich prehľadne
rozčlenené do mnohých kategórií.
Základom parsovania jednoduchých XML súborov, akými RSS feedy sú, je PHP
funkcia simplexml_load_file.
<? $request_url = "http://www.webnoviny.sk/rss/iwebnoviny7.rss"; // adresa xml súboru $xml = simplexml_load_file($request_url) or die("feed sa nepodarilo načítať"); ?>
Pokiaľ je všetko tak ako má byť, zdrojový súbor sa našiel a jeho
štruktúra je taká, že ju PHP načíta, k premennej $xml
môžeme pristupovať ako k objektu, v ktorom sú uložené jednotlivé vetvy
XML súboru. Pre lepšie pochopenie uvádzam časť výpisu premennej
prostredníctvom var_dump:
<? // var_dump($xml); object(SimpleXMLElement)#1 (2) { ["@attributes"]=> array(1) { ["version"]=> string(3) "2.0" } ["channel"]=> object(SimpleXMLElement)#2 (6) { ["title"]=> string(24) "Webnoviny.sk - Auto-moto" ["link"]=> string(24) "http://www.webnoviny.sk/" ["description"]=> string(26) "Spravodajský portál SITA" ["language"]=> string(2) "sk" ["docs"]=> string(31) "http://backend.userland.com/rss" ["item"]=> array(15) { [0]=> object(SimpleXMLElement)#3 (8) { ["title"]=> string(66) "Auto-moto: Ceny diaľničných známok pre autá sa nebudú meniť" ["link"]=> string(100) "http://www.webnoviny.sk/auto-moto/clanok/24012/Ceny-dialnicnych-znamok-pre-auta-sa-nebudu-menit.html" ["description"]=> string(397) "Ceny diaľničných známok pre motorové vozidlá do 3,5 tony sa nebudú v budúcom roku meniť. Ako vyplýva z nariadenia vlády, ktoré ministri na stredajšom rokovaní kabinetu schválili, dvojstopové motorové vozidlá alebo jazdné súpravy s celkovou hmotnosťou do 3,5 tona zaplatia za užívanie vymedzených úsekov diaľnic a ciest pre motorové vozidlá ročne 36,5 eur (1 099,6 Sk)." ["category"]=> string(9) "Auto-moto" ["author"]=> string(12) "Webnoviny.sk" ["comments"]=> string(100) "http://www.webnoviny.sk/auto-moto/clanok/24012/Ceny-dialnicnych-znamok-pre-auta-sa-nebudu-menit.html" ["enclosure"]=> object(SimpleXMLElement)#18 (1) { ["@attributes"]=> array(3) { ["url"]=> string(46) "http://www.webnoviny.sk/uploady/dialnica-9.jpg" ["lenght"]=> string(5) "30273" ["type"]=> string(10) "image/jpeg" } } ["pubDate"]=> string(31) "Wed, 29 Oct 2008 19:35:00 +0100" }
Pokiaľ by sme chceli získať výpis všetkých aktuálnych správ
uvedených v RSS feede, budeme iterovať cez pole
$xml->channel->item, ktoré v hierarchii XML feedu
predstavuje jednu novinku. K jednotlivým prvkom poľa potom pristupujeme tak,
ako vidno na príklade. Je dobré, či skôr nutné, nechať si vždy vypísať
štruktúru načítaného súboru prostredníctvom var_dump, aby
sme vedeli, k akým prvkom sa dá pristupovať.
foreach($xml->channel->item as $key) { echo $key->title .'<br />'; // vypíše titulok echo $key->link .'<br />'; // vypíše linku na celý článok echo $key->enclosure['url'] .'<br />'; // vypíše adresu obrázku k článku echo $key->description .'<br />'; // vypíše perex článku }
Parsovanie XMLka nie je nič náročné, pokiaľ je súbor korektne vygenerovaný a má správnu štruktúru. Vďaka feedom sa weby dajú obohatiť o množstvo aktualizovaných informácií z externých zdroj – pozor však aj na autorské práva!
Tomáš Mašek
naspäť
prispieť do diskusie [5]
Vyhľadávanie
Posledných 5 komentárov
Viac z rubriky
Ako ochrániť includované PHP súbory?
Automatické generovanie formulárov z MySQL
Automatický prevod texu na hyperlink
Cachovanie do HTML súboru
Cachovanie s pomocou funkcií serialize/unserialize
Čiernobiele obrázky v PHP
Dynamická tvorba URL
Fulltext ako názov stĺpca v tabuľke
Getcwd – Ako ľahko získať absolútnu cestu
Import z Excelu do MySQL databázy
Maximálny timeout vykonávania SQL skriptu
Microtime – rýchlosť načítania stránky
Odstránenie diakritiky v PHP pomocou iconv()
Overovanie a kontrola formulárov v PHP
PHP a zachytenie nedoručených mailov
PHP funkcia implode
Porovnávanie a dátovy typ DATE
Práca so súbormi pri zapnutom safe_mode
Prihlasovanie uživateľa prostredníctvom $_SESSION
Real-time kontrola e-mailovej adresy AJAX-om
Spracovanie dátového typu ENUM do HTML selectu
Strpos a offset – nájdenie výskytu znaku v reťazci
Tip: Generovanie PDF súborov
Tip: jednoduché šifrovanie a dešifrovanie v PHP
Tip: správne includovanie súborov
Ukladanie jazykových verzií statických textov
Veľmi jednoduchý návod na pekné URI
Vkladanie obrázkov do databázy
Výber záznamov začínajúcich číslom
Vyčistenie viacrozmerného poľa
Vyhľadávanie, pekné URI a diakritika
Vypísanie abecedy v PHP
Využívanie unikátnych kľúčov v MySQL databáze
Zaradenie jednej položky do viacerých kategórií
Zistenie hodnoty ďalšieho ID – autoincrement
Zložené MySQL dotazy – LEFT JOIN
Zvýrazňovanie syntaxe kódu – GeSHi
Pridať komentár



