Zenetár a webszerverünkön, avagy XML használata PHP 5 alatt. Ercsey Balázs (laze) netpeople.hu
Zenetár a webszerverünkön Miről lesz szó? XML Objektum orientált szemléletmód PHP4 PHP5
Az XML W3C szabvány üzleti érdekek felett áll Mozaikszó: extensible Markup Language ~kiterjeszhető leíró nyelv Különböző médiumok közti kapcsolat, Adatszerkezetek leírása
Az XML Elsőre kísértetiesen hasonlít a HTMLhez de van pár megkötés: Kell lennie záró párnak, vagy az elemet kell zárni A paraméter értékét idézőjelbe kell tenni: <elem>szoveg</elem> <elem parameter= ertek />
Az XML Köztes nyelv Más nyelvek leírására szolgál, például: WDDX, RSS, XHTML A célnak leginkább megfelelő saját struktúra, és saját elem definíció lehetséges DTD (Document Type Defintion) Adatátvitel különböző rendszerek, például Macromedia Flash és PHP között.
Zene, zene, zene Az adathalmaz kerete: <?php $xmldata = <<<XML <?xml version='1.0' standalone='yes'?> <tracks>... </tracks> XML;?>
Zene, zene, zene Az adathalmaz egyetlen eleme: <track> <title>katjusha</title> <author>leningrad Cowboys</author> <album type= collection > Thank You Very Many </album> </track> Ebből lehet még tetszőleges számú darab
Zene, zene, zene Észrevételek: Saját struktúra, saját, beszédes elemnevek Hasonló struktúrákra példa: itunes exportálási lehetősége Házi feladat elemezni, feldolgozni!
Feldolgozás PHP4 alatt: Külső PHP modul (expat, sablotron) lassabb Külön erőforrás azonosító Két fő lehetőség: SAX (Simple API for XML) Esemény alapú kezelés DOM (Document Object Model) A dokumentum strukturális kezelése
Feldolgozás PHP5 alatt több lehetőség van: SAX DOM SimpleXML A továbbiakban ezzel foglalkozunk
Feldolgozás A SimpleXML előnyei: Nem bővítményként fut, az új libxml2 modult használja, ami a PHP5 része sokkal gyorsabb Nem kell külön erőforrás azonosítót létrehozni Minden adat objektum orientált módon érhető el
Feldolgozás 1. Példa, elemek listázása: Kiíratjuk a számok címeit <track>... <title>a szám címe</title> </track>
Feldolgozás... Forráskód: <?php include tracks.php ; $xmlobject = simplexml_load_string( $xmldata ); foreach( $xmlobject->track as $track ) { echo( $track->title. <br> ); }?>
Feldolgozás... Észrevételek: Rendkívül egyszerű beolvasás Azonnal egy objektum áll a rendelkezésünkre: $xmlobject = simplexml_load_string( $xmldata ); Amit tovább bontva is objektumként kezelhetünk: $track->title
Feldolgozás 2. Példa, elemek paramétereinek listázása Kiíratjuk az albumok címeit és típusait <track>... <album type= Az album típusa > Az album címe </album> </track>
Feldolgozás Megint forráskód: <?php include tracks.php ; $xmlobject = simplexml_load_string( $xmldata ); foreach( $xmlobject->track as $track ) { echo( $track->album ); echo( (.$track->album[ type ]. )<br> ); }?>
Feldolgozás XPath kezelése SimpleXML által Az XPath: Külön szabvány Elemek keresésére szolgál XML alapú forrásban XML, XHTML, WDDX,... Az elem elérése független az elem helyétől Gyorsabb, mint az elemek egyenkénti, manuális ellenőrzése
Feldolgozás 3. Példa, XPath kezelése Kiválasztó: //author illeszkedik minden <author> elemre a dokumentumban, bárhol legyen is. Válogassunk ki minden előadót! <author>az előadó neve</author>
Feldolgozás Íme, a forráskód: <?php include tracks.php ; $xmlobject = simplexml_load_string( $xmldata ); foreach( $xmlobject->xpath( //author ) as $author ) { echo( $author. <br> ); }?>
Módosítás SimpleXML-ben megvan a módosítás lehetősége A beolvasáskor kapott objektumokon keresztül A végeredmény a megváltoztatott XML forrás
Módosítás 4. Példa, elem módosítása Az egyik szám címének megváltoztatása: Előtte: <track> </track> Utána: <track> </track> <title>a régi cím</title> <title>az új cím</title>
Módosítás Az elmaradhatatlan forráskód: <?php include tracks.php ; $xmlobject = simplexml_load_string( $xmldata ); $xmlobject->track->title = Ballad Of The Leningrad Cowboys ; echo $xmlobject->asxml();?>
Végszó Tehát, mint azt láthattuk, az objektum orientált XML kezelés PHP5 alatt: Gyorsabb Jelentősen egyszerűbb Kiváló megoldás strukturált adatkezelésre
Linkek Néhány hasznos oldal: -XML: http://www.w3.org/tr/rec-xml XPath: http://www.w3.org/tr/xpath libmxml2: http://www.xmlsoft.org PHP 5 Manual / SimpleXML: http://hu.php.net/manual/en/ref.simplexml.php