Curs PHP-MySQL

Functii DOM - XML (PHP 5+)

Aici gasiti cateva din cele mai comune si utilizate functii PHP DOM pentru XML.
Dupa lista cu functiile, gasiti in subsolul paginii un exemplu cu modul de aplicare a unora din aceste functii, din care puteti intelege cum se folosesc.


- Functii principale, de inceput:

  • DOMDocument() - Creaza un obiect in memorie. Optional, poate avea parametri pt. versiunea XML si formatul caracterelor datelor, Ex.: $doc = new DOMDocument('1.0', 'utf-8')
  • load("nume_fisier") - Incarca in obiect continutul XML din fisierul "nume_fisier".
  • loadXML("sir") - Incarca in obiect continutul XML ce se gaseste in sirul "sir"

- Functii pentru elemente, atribute si continutul lor:

  • createElement("nume", "continut") - Creaza un nou element (Nod) cu numele "nume" si optional cu un continut text specificat in "continut". Dupa creare se include in obiect cu "appendChild()".
  • createAttribute("nume") - Creaza un atribut cu numele "nume". Dupa creare poate fi inclus in obiect cu "appendChild()" si poate primi o valoare cu "createTextNode()"
  • setAttribute('nume', 'valoare') - Seteaza (adauga) un atribut cu numele "nume" si valoarea "valoare". Daca exista deja, il modifica.
  • getElementsByTagName("tag") - Preia toate elementele cu numele "tag". Pentru toate elementele, cu toate numele, se specifica "*" in loc de "tag".
  • createTextNode('text') - Adauga un continut text la un obiect-nod: element sau atribut din obiect. Dupa creare se include in obiect cu "appendChild()".
  • getAttribute("nume") - Obtine valoarea atributului "nume" din obiectul curent.
  • removeAttribute("nume") - Sterge atributul "nume" din element.

- Functii pentru sistemul ierarhic:

  • appendChild($add) - Adauga in obiect un element-copil (atribut sau alta valoare) creat anterior si a carei instanta e stocata in "$add". Acesta este adaugat dupa continutul sau celelalte Noduri din acel obiect.
  • removeChild($nod) - Sterge din obiect elementul a carui instanta e stocata in $nod.
  • insertBefore($nod_nou, $nod_ref) - Adauga un copil (nod) nou inaintea unuia specificat ca referinta in "$nod_ref".
  • parentNode - Obtine elementul parinte al nodului curent, in care acesta e inclus.
  • firstChild - Obtine primul copil al obiectului (Nodului) curent.
  • lastChild - Obtine ultimul copil al obiectului (Nodului) curent.
  • previousSibling - Obtine nodul imediat dinaintea celui curent, din acelasi parinte.
  • nextSibling - Obtine nodul urmator dupa cel curent, din acelasi parinte.

- Functii de verificare:

  • validate() - Returneaza TRUE daca documentul e valid, in caz contrar FALSE.
  • nodeType - Returneaza un numar ce indica tipul nodului curent, numar asocciat cu urmatoarele tipuri:
    • 1 - XML_ELEMENT_NODE
      2 - XML_ATTRIBUTE_NODE
      3 - XML_TEXT_NODE
      4 - XML_CDATA_SECTION_NODE
      5 - XML_ENTITY_REFERENCE_NODE
      6 - XML_ENTITY_NODE
      7 - XML_PROCESSING_INSTRUCTION_NODE
      8 - XML_COMMENT_NODE
      9 - XML_DOCUMENT_NODE
      10 - XML_DOCUMENT_TYPE_NODE
      11 - XML_DOCUMENT_FRAGMENT_NODE
      12 - XML_NOTATION_NODE
  • hasAttribute("nume") - Returneaza TRUE daca atributul "nume" e in obiectul curent, in caz contrar FALSE.
  • hasAttributes() - Returneaza TRUE daca obiectul curent are atribute, in caz contrar FALSE.
  • hasChildNodes() - Returneaza TRUE daca obiectul curent are elemente copil, in caz contrar FALSE.

- Alte functii de lucru:

  • childNodes - Preia intr-un obiect o lista (incepand cu index 0) cu toti copii obiectului curent.
  • length - Obtine numarul de elemente (Noduri) dintr-un obiect. Ex.: $obiect->length
  • item("nr") - Obtine elementul (Nodul) cu indexul (umar de ordine) "nr" din obiect. Ex., primu Nod: $obiect->item(0)
  • nodeName - Numele nodului curent
  • nodeValue - Valoarea (continutul) nodului curent.
  • textContent - Continutul text din nodul curent.

- Functii care sunt de obicei apelate la sfarsit, dupa ce au fost executate celelalte functii:

  • save("nume_fisier") - Salveaza structura de date din obiect in fisier-ul "nume_fisier"
  • saveXML() - Transforma (stocheaza) structura de date din obiect intr-un sir. Ca parametru poate primi un Dom-Node si astfel va stoca in sir doar continutul acelui Nod.

Exemplu de aplicare

- Se foloseste un document XML preluat dintr-un sir:
<?php
// Pentru aceste exemplele se foloseste un document XML stocat sub forma de sir intr-o variabila $xml_doc
$xml_doc = '<?xml version="1.0" encoding="utf-8" ?>
	<root>
	 <element>
	  <sub_element nume="se1">Text unu</sub_element>
	  <sub_element nume="se2">Text doi</sub_element>
	 </element> 
	</root>';

$doc = new DOMDocument();                    // Creaza un nou obiect in memorie
$doc->loadXML($xml_doc);                         // Transforma sirul din $xml_doc intr-un obiect, in cel nou creat

$get_elms = $doc->getElementsByTagName("*");     // Preia toate elementele (nodurile) stocate in obiect

// Afiseaza numarul de elemente (Nodes) preluate
echo $get_elms->length;                               // 4

// Afiseaza numele primului element
echo '<br>'. $get_elms->item(0)->nodeName;                   // root

// Afiseaza valoarea primului copil din elementul (Nodul) patru
echo '<br>'. $get_elms->item(3)->firstChild->nodeValue;      // Text doi

$nods_sube = $doc->getElementsByTagName('sub_element');       // Preia o lista cu elementele (nodurile) 'sub_element'

// Daca al doilea nod din $nods_sube are atributul 'nume', ii afiseaza valoarea
if($nods_sube->item(1)->hasAttributes()) {
  echo '<br>'. $nods_sube->item(1)->getAttribute('nume');          // se2
}

// Seteaza inca un atribut celui deal doilea element din $dods_sube
$nods_sube->item(1)->setAttribute('atr', 'atribut nou');

// Creaza un continut text nou
$text_nou = $doc->createTextNode(" - Text nou."); 

// Adauga textul din $text_nou la al doilea element din $dods_sube, dupa continutul text pe care deja il are
$nods_sube->item(1)->appendChild($text_nou); 

// Afiseaza continutul text al primului element din $nods_sube
echo '<br>'. $nods_sube->item(0)->textContent;                   // Text unu


// Obtine parintele in care sunt elementele (Nodurile) din $nods_sube
$parent_sube = $nods_sube->item(0)->parentNode;

// Sterge primul element din $nods_sube (apeland functia din parintele acestuia)
$parent_sube->removeChild($nods_sube->item(0));

// Adauga sub forma de sir continutul obiectului rezultat dupa aceste prelucrari
$doc_fin = $doc->saveXML();

echo '<br>'. htmlentities($doc_fin);          // Afiseaza sirul, transformand tag-urile pt. a fi vizibile in navigator
?>

- Lista completa cu functiile PHP DOM o gasiti la pagina Functii PHP DOM

Lectii / Tutoriale

Diverse PHP

Functii DOM XML - Tutoriale PHP
2008 - 2012 Webmaster, Webdesigner : MarPlo