|
Te-ai intrebat vreodata cum poti realiza comunicarea dintre o baza de date MySQL si o aplicatie Flash sau cum poti genera un rss pentru site-ul sau blogul tau? Raspunsul sta in documentele xml, ale caror flexibilitate si simplitate au facut din acest format unul dintre cele mai raspandite limbaje web.
In acest tutorial iti voi prezenta cateva functii de baza din API-ul DOMDocument, care te vor ajuta sa generezi documente xml. Nu uita, pentru a executa codul din exemplele de mai jos vei avea nevoie de un server Apache care sa aiba instalate PHP 5 si biblioteca DOMDocument.
Tipul documentului
Sa incepem cu declararea si headerele documentului XML. In PHP, lucrurile sunt foarte simple – trebuie doar sa creezi o instanta a clasei DOMDocument si sa-i transmiti ca parametrul versiunea de xml si setul de caractere utilizat pentru encodare (utf-8, iso-8859-1). Iata codul:
<?php
header("content-type: text/xml; charset=utf-8");
$XMLDoc = new DOMDocument('1.0','utf-8');
$XML = $XMLDoc->saveXML();
echo $XML;
?>
Poti observa ca in exemplul de mai sus am apelat metoda saveXML(). Aceasta intoarce continutul documentului xml, care poate fi ulterior afisat in browser sau scris intr-un fisier.
Elemente si noduri text
Totul e minunat pana acum, dar ce faci cu un xml fara continut? Desigur, un document ce nu contine informatii e inutil, deci trebuie sa ii adaugam ceva elemente si date. Pentru aceasta, DOMDocument iti pune la dispozitie o serie de metode pentru crearea elementelor si a nodurilor de text.
Initializarea unui element are loc in doua etape:
- Pentru fiecare element sau nod text pe care vrei sa-l creezi trebuie sa apelezi metodele clasei DOMDocument: createElement() si createTextNode(), furnizand ca parametri numele elementului si respectiv textul pe care vrei sa il contina.
- Noul element trebuie legat de un nod parinte, fie ca acesta este radacina documentului xml, sau un alt nod din ierarhie. Acest lucru se face prin apelarea metodei appendChild() avand ca argument obiectul returnat de una dintre functiile de mai sus.
Iata un exemplu:
<?php
header("content-type: text/xml; charset=utf-8");
$XMLDoc = new DOMDocument('1.0','utf-8');
$RootElement = $XMLDoc->createElement('content','');
$XMLDoc->appendChild($RootElement);
$ChildElement = $XMLDoc->createElement('item', '');
$RootElement->appendChild($ChildElement);
$TextNode = $XMLDoc->createTextNode("Fatboy Slim - Push the Tempo");
$ChildElement->appendChild($TextNode);
$XML = $XMLDoc->saveXML();
echo $XML;
?>
Dupa cum poti vedea in codul de mai sus, mai intai am creat un element radacina denumit content, apoi i-am adaugat un element copil cu numele item. La randul sau, elementul item contine un nod de tip text. Daca salvezi codul intr-un fisier .php si il accesezi intr-un browser, output-ul ar trebui sa arate astfel:
<?xml version="1.0" encoding="utf-8" ?>
<content>
<item>Fatboy Slim - Push the Tempo</item>
</content>
Ca alternativa, poti crea un element cu un continut text astfel:
// creeaza un element copil
$ChildElement = $XMLDoc->createElement('item', 'Fatboy Slim - Push the Tempo');
$RootElement->appendChild($ChildElement);
In acest mod, poti elimina crearea nodului de tip text, rezultatul afisat fiind acelasi.
Atribute
O alta modalitate de a include informatii in cadrul unui element este cu ajutorul atributelor. Acestea sunt adaugate in doi pasi: mai intai este apelata functia createAttribute() din DOMDocument pentru a crea un atribut, apoi acestuia ii este atasat un nod de tip text.
<?php
header("content-type: text/xml; charset=utf-8");
$XMLDoc = new DOMDocument('1.0','utf-8');
$RootElement = $XMLDoc->createElement('content','');
$XMLDoc->appendChild($RootElement);
$ChildElement = $XMLDoc->createElement('item', 'Fatboy Slim - Push the Tempo');
$RootElement->appendChild($ChildElement);
$AttributeNode = $XMLDoc->createAttribute("filetype");
$ChildElement->appendChild($AttributeNode);
$AttributeValue = $XMLDoc->createTextNode("mp3");
$AttributeNode->appendChild($AttributeValue);
$XML = $XMLDoc->saveXML();
echo $XML;
?>
Iata output-ul:
<?xml version="1.0" encoding="utf-8" ?>
<content>
<item filetype="mp3">Fatboy Slim - Push the Tempo</item>
</content>
Blocuri CDATA
Desi nu sunt utilizate foarte des, API-ul DOMDocument ofera suport pentru blocurile CDATA. Pentru cei care nu stiu, limbajul XML contine un set de caractere speciale care sunt: &,<,>,",'. Pentru a le include in continut, ele trebuiesc imbricate in blocuri CDATA, al caror scop este de a-i "spune" parserului xml ca ele nu trebuiesc interpretate ca tag-uri sau procesate.
Adaugarea unui astfel de bloc se face foarte simplu, prin apelarea functiei createCDATASection():
<?php
header("content-type: text/xml; charset=utf-8");
$XMLDoc = new DOMDocument('1.0','utf-8');
$RootElement = $XMLDoc->createElement('content', '');
$XMLDoc->appendChild($RootElement);
$ChildElement = $XMLDoc->createElement('item', '');
$RootElement->appendChild($ChildElement);
$CDATANode = $XMLDoc-> createCDATASection ("<Fatboy Slim - Push the Tempo>");
$ChildElement->appendChild($CDATANode);
$AttributeNode = $XMLDoc->createAttribute("filetype");
$ChildElement->appendChild($AttributeNode);
$AttributeValue = $XMLDoc->createTextNode("mp3");
$AttributeNode->appendChild($AttributeValue);
$XML = $XMLDoc->saveXML();
echo $XML;
?>
Iata rezultatul:
<?xml version="1.0" encoding="utf-8" ?>
<content>
<item filetype="mp3">
</item>
</content>
Cam atat pentru acest tutorial. Pentru a vedea lista completa a functiilor si proprietatilor DOMDocument, poti accesa acest link.
|