Posted by: misterjinx on: noiembrie 2, 2008
Ca urmare a ultimului articol, voi continua acum descrierea modalităţilor de lucru cu xml din php. De această dată este vorba de DOM.
Parserele de tip DOM construiesc în memorie întregul arbore de resurse. Acesta poate fi ulterior parcurs, şters, modificat, adăugat. Un avantaj al DOM constă în flexibilitatea mai mare oferită faţă de SimpleXML, cu preţul unei complexităţi sporite.
Extensia DOM (specifică php5) este exclusiv orientată pe obiecte. Principala clasă este DOMNode, din care derivă DOMDocument, DOMElement, DOMAttr, DOMComment, DOMText. Celelalte două clase disponibile sunt DOMNodeList şi DOMXPath.
Încărcarea codului xml se poate face din fişier sau string, prin instanţierea unui obiect de tip DOMDocument urmat de apelarea metodelor de încărcare: load şi loadHTMLFile (din fişier), respectiv loadHTML şi loadXML (din string).
$xml = new DOMDocument();
$xml->load(“fisier.xml”);
$xml->load(“http://adresa_web/fisier.xml”);
$string = file_get_contents(“fisier.xml”);
$xml->loadXML($string);
Parcurgerea unui arbore de tip DOM şi accesul la resurse se face printr-o multitudine de metode şi câmpuri puse la dispoziţie de toate clasele DOM. Lista lor este foarte mare şi de aceea voi menţiona doar câteva, cele mai importante.
Să luăm drept exemplu acelaşi fişier ca şi în prima parte a articolului:
<?xml version=”1.0″?>
<unitati>
<server tip=”pc” memorie=”1gb” hdd=”100gb”>
<nume>unitatea 0</nume>
</server>
<calculator tip=”pc” memorie=”2gb” hdd=”160gb”>
<nume>unitatea 1</nume>
<valoare>1500 lei</valoare>
</calculator>
<calculator tip=”pc” memorie=”1gb” hdd=”100gb”>
<nume>unitatea 2</nume>
<valoare>1200 lei</valoare>
</calculator>
<calculator tip=”mac” memorie=”2gb” hdd=”120gb”>
<nume>unitatea 3</nume>
<valoare>3500 lei</valoare>
</calculator>
</unitati>
Parcurgerea acestui fişier se poate face în felul următor:
$xml = new DOMDocument();
$xml->load(“fisier_de_mai_sus.xml”);
echo $xml->nodeName; // afiseaza #document
echo $xml->firstChild->nodeName; // afiseaza unitati
echo $xml->firstChild->firstChild->nodeName; // afiseaza server
foreach ( $xml->firstChild->childNodes as $s) echo $s->nodeName . ” “; // afiseaza server calculator calculator calculator
foreach ( $xml->DocumentElement as $nod )
{
echo $nod->nodeName;
if ( $nod->hasAttributes() )
{
foreach ( $nod->attributes as $a )
{
echo $a->name . “: ” . $a->value . “<br/>”; //afiseaza nume_atribut: valoare_atribut
}
}
echo “<br/>”;
}
Bun, acum să luăm pe rând să vedem ce am folosit mai sus pentru parsarea fişierului.
De asemenea se pot adăuga noduri la obiectul curent prin metodele clasei DOMNode, appendChild sau insertBefore, iar asocierea de atribute se poate face prin metoda setAttribute, a clasei DOMElement.
Dacă dorim, putem crea de la zero un document xml folosind metoda createElement a clasei DOMDocument, pentru crearea de elemente, createAttribute, pentru adăugare de atribute şi createTextNode, pentru adăugarea de PCDATA.
Spuneam la început că se pot folosi şi interogări XPath pentru parcurgerea codului XML. Clasa care ajută la acest lucru este DOMXPath. Prinicipala metodă a acestei clase este query, care primeşte ca argument expresia XPath şi returnează nodurile găsite sub forma unui obiect de tip DOMNodeList ce se poate itera.
Extensia DOM este foarte puternică pentru lucrul cu fişiere XML şi din acest motiv, foarte complexă. Dacă doriţi să cunoaşteţi mai multe desprea ea puteţi să începeţi cu documentaţia de pe site-ul oficial.
[...] vă voi prezenta în cele ce urmează foloseşte extensia de care v-am mai vorbit acum ceva vreme, DOM. După cum spuneam şi atunci, DOM prelucrează fişiere XML. Aşadar primul pas pe care trebuie [...]
[...] vă voi prezenta în cele ce urmează foloseşte extensia de care v-am mai vorbit acum ceva vreme, DOM. După cum spuneam şi atunci, DOM prelucrează fişiere XML. Aşadar primul pas pe care trebuie [...]