E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Diverse (10)

Parsarea documentelor XML cu SimpleXML

26.09.2009
Parsarea documentelor XML cu SimpleXML

Parsarea XML-urilor este o parte integranta a dezvoltarii web, fie ca este vorba de implementarea unui protocol de comunicatie, de citirea unui fisier RSS sau generarea unui feed pentru iTunes. In mod cert, mai devreme sau mai tarziu, toti programatorii PHP se lovesc de aceasta problema, ce nu se rezuma neaparat la necesitatea de a parsa un fisier XML, ci si care este cea mai optima si facila metoda.

Total vizualizari: 6736 6736 afisari   |   Comentarii  2   |   Rating   |   (5 voturi)   |   Timp necesar: 20 min 20 min   |   Nivel de cunostiinte necesar: Mediu  Mediu

Autor: alexandra Expert
Download
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
1
comenteaza printeaza

Parsarea XML-urilor este o parte integranta a dezvoltarii web, fie ca este vorba de implementarea unui protocol de comunicatie, de citirea unui fisier RSS sau generarea unui feed pentru iTunes. In mod cert, mai devreme sau mai tarziu, toti programatorii PHP se lovesc de aceasta problema, ce nu se rezuma neaparat la necesitatea de a parsa un fisier XML, ci si care este cea mai optima si facila metoda.

Din fericire, in afara numeroaselor imbunatatiri legate de modelul obiectelor, exceptii si alte lucruri dragute, PHP5 cuprinde o serie de functii create tocmai pentru acest scop: parsarea documentelor XML. Dintre acestea se remarca o biblioteca cunoscuta sub numele de simpleXML, ale carei facilitati sunt mai mult decat suficiente pentru a acoperi procesarea de baza a XML-urilor.

SimpleXML cuprinde functii de citire a documentelor XML, de extragere a informatiilor din acestea, de comparare si inlocuire a nodurilor, s.a.m.d., pe care le poti utiliza cu succes in scripturile tale, cu un efort minim.

Acestea fiind spuse, sa trecem la treaba!

Incarcarea documentelor cu simplexml_load_file()

Pentru a putea citi continutul unui fisier XML, acesta trebuie mai intai deschis. Pentru aceasta, PHP iti pune la dispozitie functia simplexml_load_file, care, dupa cum ii spune si numele, are rolul de a accesa un fisier XML si de a-l incarca in memorie. Prototipul functiei este urmatorul:

object simplexml_load_file ( string $cale_fisier [, string $nume_clasa = "SimpleXMLElement")*

*In afara celor prezentati mai sus, simplexml_load_file are inca 3 parametrii optionali, pe care insa nu ii voi discuta aici.

Dupa cum poti observa, primul parametru reprezinta calea catre fisierul XML pe care vrei sa-l accesezi, iar cel de-al doilea, $nume_clasa, este denumirea tipului de obiect pe care vrei sa-l returneze functia. Desigur, PHP impune o restrictie in acest sens, si anume faptul ca obiectul returnat trebuie sa fie un tip derivat (adica o clasa mostenita) din SimpleXMLElement.

Sa vedem cum lucreaza aceasta functie. Pentru exemplul de mai jos, am presupus ca vrei sa parcurgi un fisier XML cu urmatorul continut:

 
<?xml version="1.0" encoding="utf-8" ?> 
<rss version="2.0">
    <channel>
        <title>GRAFICA 2D</title>
        <description>GRAFICA 2D</description> 
        <link>http://www.e-learn.ro/tutoriale.htm</link> 
        <language>ro</language> 
        <copyright>Copyright 2008-2009 E-LEARN.ro.</copyright> 
        <item>
            <title><![CDATA[  Cum sa desenezi un cos de cumparaturi vectorial ]]> </title>
            <description><![CDATA[ Iti doresti un nou icon? Nu mai cauta. Invata cum sa creezi imaginea personalizata a unui cos de cumparaturi.Vom imbina calitatile 3D cu aspectul plan. Trebui sa stapanesti foarte bine instrumentele Adobe Illustrator pentru a completa acest tutorial. ]]> </description>
            <link><![CDATA[  http://www.e-learn.ro/tutorial/GRAFICA_2D/Illustrator/Tehnici_de_desen/Cum_sa_desenezi_un_cos_de_cumparaturi_vectorial_/18/1/369.htm ]]> </link>
            <guid><![CDATA[  http://www.e-learn.ro/tutorial/GRAFICA_2D/Illustrator/Tehnici_de_desen/Cum_sa_desenezi_un_cos_de_cumparaturi_vectorial_/18/1/369.htm ]]> </guid>
        </item>
        <item>
            <title><![CDATA[  Manipularea fotografiei cu fata si pasarea colibri ]]> </title>
            <description><![CDATA[  In acest tutorial vei invata cum sa manipulezi o fotografie, folosind diferite tehnici precum modificarea portretului unei fete, extinderea unor background-uri si aplicarea unui efect sumbru pentru fotografie. ]]> </description> 
            <link><![CDATA[  http://www.e-learn.ro/tutorial/GRAFICA_2D/Photoshop/Editare_foto/Manipularea_fotografiei_cu_fata_si_pasarea_colibri/22/1/362.htm ]]> </link>
            <guid><![CDATA[  http://www.e-learn.ro/tutorial/GRAFICA_2D/Photoshop/Editare_foto/Manipularea_fotografiei_cu_fata_si_pasarea_colibri/22/1/362.htm ]]> </guid>
        </item>
        <item>
            <title><![CDATA[  Impuscatura printr-un geam ]]></title>
            <description><![CDATA[  In acest tutorial vei invata cum sa creezi o distorsiune reala folosind filtrul displace si aplicand alte efecte de fotografie pentru a-i da o privire rece. ]]> </description>
            <link><![CDATA[  http://www.e-learn.ro/tutorial/GRAFICA_2D/Photoshop/Filtre_si_efecte/Impuscatura_printr_un_geam/17/1/361.htm ]]> </link>
            <guid><![CDATA[  http://www.e-learn.ro/tutorial/GRAFICA_2D/Photoshop/Filtre_si_efecte/Impuscatura_printr_un_geam/17/1/361.htm ]]></guid>
        </item>
    </channel>
</rss>

Acesta reprezinta o portiune dintr-un RSS cu tutoriale de pe e-learn.ro. Dupa cum poti observa, fiecare tag <item> reprezinta un tutorial cu titlu (<title>), descriere (<description>) si link (<link> si <guid>).

Sa presupunem ca vrei sa parcurgi acest document si sa afisezi titlul si linkul acestui RSS. Pentru aceasta, salveaza codul de mai sus intr-un fisier cu denumirea exemplu.xml, si scrie urmatorul cod intr-un fisier .php din acelasi director cu xml-ul tau:

 
<?php
// incarca fisierul exemplu.xml
if(!$xml = simplexml_load_file('exemplu.xml')){
    trigger_error('Eroare la citirea fisierului',E_USER_ERROR);
}
 
foreach($xml as $channel){
    echo $channel->title."<br>";
    echo $channel->link;
}
?>

Dupa cum poti observa, continutul fisierului exemplu.xml este incarcat in variabila $xml, apoi tag-urile acestuia sunt accesate ca proprietati ale obiectelor utilizand notatia ->.

Rezultatul executiei scriptului de mai sus este:

GRAFICA 2D
http://www.e-learn.ro/tutoriale.htm

Accesarea nodurilor ca elemente ale unui array

Dupa cum poti observa in codul xml de mai sus, elementul <channel> contine mai multe elemente <item>, care reprezinta de fapt tutorialele. Sa presupunem ca vrei sa afisezi toate tutorialele sau sa cauti un anumit tutorial. Cum faci?

Din fericire, incarcarea unui XML cu functia simplexml_load_file() presupune ca nodurile acestuia pot fi accesate ca array-uri de elemente. Pentru a demonstra aceasta functionalitate, iata cum am afisat titlul primului tutorial din lista:

 
<?php
// incarca fisierul exemplu.xml
if(!$xml = simplexml_load_file('exemplu.xml')){
    trigger_error('Eroare la citirea fisierului',E_USER_ERROR);
}
 
// afiseaza titlul primului tutorial 
echo 'Titlul este...<br />';
echo $xml->channel->item[0]->title;
 
?>

Acest script va afisa:

Titlul este...
Cum sa desenezi un cos de cumparaturi vectorial

Dupa cum am precizat si mai sus, odata ce continul fisierului a fost incarcat, scriptul localizeaza titlul primului tutorial utilizand urmatoarea sintaxa:

 
echo $xml->channel->item[0]->title;

Daca privesti expresia de mai sus, poti observa ca primul tutorial, ce este de fapt un element <item>, este localizat ca proprietate ca elementului <channel> prin indicele 0 (item[0]), apoi este afisat titlul prin apelarea proprietatii title (item[0]->title).

Deci, extensia simpleXML iti permite sa accesezi noduri dintr-un fisier xml utilizand aceeasi sintaxa ca pentru array-uri. Utilizand acelasi fisier exemplu.xml, iata cum poate fi afisata descrierea ultimului tutorial din lista:

 
<?php
// incarca fisierul exemplu.xml
if(!$xml = simplexml_load_file('exemplu.xml')){
    trigger_error('Eroare la citirea fisierului',E_USER_ERROR);
}
 
// afiseaza descrierea ultimului tutorial 
echo 'Descrierea ultimului tutorial este...<br />';
echo $xml->channel->item[2]->description;
?>

In acest mod, intregul proces de localizare a unui nod se reduce la parcurgerea xml-ului de la radacina.

Cam atat deocamdata despre simpleXML. Sper ca acest tutorial sa iti fie de folos pentru parcurgerea si citirea informatiilor dintr-un fisier xml simplu.


Pagina:
1
comenteaza printeaza

Cuvinte cheie:   php,   xml,   parsare xml,   simpleXML,   simplexml_load_file,   SimpleXMLElement

Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(5 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (2) spune-ti parerea
alexandra alexandra , Sambata, 26 Septembrie 2009, ora 14:51
#2

Multumesc :D. Planuiesc sa scriu inca in tutorial php/xml, cum sa compui un xml cu DOMDocument :D.

Raporteaza acest comentariu ca injurios!
alext_1020 alext_1020 , Sambata, 26 Septembrie 2009, ora 13:24
#1

Un tutorial bun! Felicitari! La mai multe! Si felicitari si pentru avansare :D

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4670
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4590
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4510
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4415
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4290
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
SWF Python XML StyleSheet Javascript Fotografie Dreamweaver Excel Gimp Swift 3D RoR Flash MySQL Illustrator Lightroom JSON HTML Fireworks XHTML Powerpoint Vista Verilog CSS Outlook Java SEO COREL DRAW PSD Ruby on Rails Word AJAX Sony Vegas Photoshop Bridge Action Script PHP
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software