Pentru a prelucra in PHP datele dintr-un document XML trebuie ca acesta sa aibe structura si sintaxa corecta comform standardului XML, nu e nevoie sa fie strict valid, adica sa contina si DTD (vedeti explicatii despre asta in lectia precedenta), dar indicat e sa fie si valid.
Sunt trei moduri (module) pentru lucrul cu XML: SimpleXML, DOM (Document Object Model) si SAX (Simple API for XML); toate trei sunt incluse in PHP. Fiecare are avantaje si minusuri, pot fi folosite oricare din ele pentru a lucra cu datele din XML, pt. a crea, extinde si modifica documente XML.
In continuare iata cate ceva, pe scurt, despre aceste module, dupa care va fi explicat DOM, iar in lectia urmatoare si celelalte doua.
Document Object Model (DOM) e un modul complet pentru crearea, editarea si manipularea datelor din documentele XML. Deoarece aceste date sunt retinute in memorie sub forma de arbore ierarhic, e recomandat ca documentul XML sa fie valid.
Fiecare element e transformat intr-un Obiect si e vazut ca un Nod ce poate avea Continut, Parinti si Copii; incepand cu elementul radacina. La randul lor, fiecare din acestia putand fi un Nod si interpretat ca un Obiect separat, devenind totul o structura legata dar si individuala.
Aceasta structura poate fi modificata cu functii speciale (dintr-o librarie de functii cum e "gnome-libxml2" care sunt implementate in PHP) si rescrisa iar intr-un format XML.
<?php $doc = new DomDocument('1.0', 'utf-8'); // Se creaza in memorie un nou obiect DOM $root = $doc->createElement('html'); // Se creaza primul obiect element, radacina $root = $doc->appendChild($root); // Se adauga in structura documentului, ca element $body = $doc->createElement('body'); // Se creaza un alt element, 'body' $body = $root->appendChild($body); // Se adauga 'body' ca element copil in radacina $body->setAttribute('bgcolor', '#e8e8fe'); // Se seteaza un atribut pt. elementul doi (body) $graff = $doc->createElement('p'); // Se creaza un alt element, 'p' $graff = $body->appendChild($graff); // Se adauga 'p' ca element copil in 'body' $text = $doc->createTextNode('Un text pentru continut'); // Se creaza un continut text $text = $graff->appendChild($text); // Se adauga continutul text in 'p' // Salveaza, scrie datele create in obiectul $doc // Afiseaza mesaj daca a putut salva fisierul pe server sau nu if($doc->save("exemplu_dom.xml")) echo 'Documentul exemplu_dom.xml a fost creat'; else echo 'Eroare: documentul exemplu_dom.xml nu a putut fi creat'; ?>
<?php $file = 'exemplu_dom.xml'; // Calea si numele fisierului .xml $doc = new DOMDocument(); // Creaza un nou obiect in memorie $doc->load($file); // Incarca datele din $file in obiectul nou creat $get_elms = $doc->getElementsByTagName("*"); // Preia toate elementele ("*") stocate in obiect $nr_elms = $get_elms->length; // Obtine numarul de elemente (Nodes) preluate // Parcurge variabila cu obiectul ce stocheaza elementele (Nod-urile) for($i = 0; $i<$nr_elms; $i++) { $node = $get_elms->item($i); // Preia fiecare Nod din parcurgere $element = $node->nodeName; // Obtine numele elementului // Daca elementul este 'p', ii adauga alt continut text if($element=='p') { $node->nodeValue = 'Un continut text nou'; // Creaza noul element dupa 'p' (in elementul Parinte unde se afla si 'p'), cu nume si continut text $element_nou = $doc->createElement('div', 'Acesta este elementul nou adaugat'); $node->parentNode->appendChild($element_nou); // Adauga in elementul parinte noul element creat } } // Daca poate salva noul continut XML (din obiectul $doc) intr-un fisier .xml // Preia continutul si intr-un sir (cu "saveXML()") pt. a afisa rezultatul obtinut if($doc->save('exemplu2_dom.xml')) { echo htmlentities($doc->saveXML()); } // Daca doriti rescrierea primului document XML, inlocuiti 'exemplu2_dom.xml' cu numele aceluia ?>
<table><tr> <th>Title 1</th> <th>Title 2</th> </tr></table>
.some_class { line-height: 150%; }
document.getElementById("id_button").onclick = function(){ window.open("http://coursesweb.net/"); }
$ar_dir = scandir("dir_name"); var_export($ar_dir);
He will sleep there. - El va dormi acolo.
Él dormirá allí. - El va dormi acolo.