Sunteți pe pagina 1din 4

Laborator de Structuri de Date Lucrarea nr.

14

Stocarea datelor/structurilor n fiiere/format XML

1. Formatul XML .............................................................................................................................. 1 2. Reprezentarea documentelor XML cu ajutorul unui arbore ...................................................... 2 3. Modaliti de citire a fiierelor XML ........................................................................................... 3 4. Exerciii ........................................................................................................................................ 4

1. Formatul XML Un document XML (Extensible Markup Language) permite stocarea unor de structuri arborescente de date prin intermediul unor cmpuri i valori textuale grupate sub form de taguri. XML se aseamn cu limbajul HTML (HyperText Markup Language) doar ca n cazul XML tagurile nu sunt predefinite (nu au semnificaii bine definite). Limbajul este considerat a fi extensibil deoarece permite utilizatorilor s i defineasc propriile elemente. In exemplul de mai jos este furnizat un exemplu de document XML ce conine o parte dintre studenii unei faculti. Tag-urile pot fi identificate ca fiind incluse ntre caracterele < >, ca de exemplu Prenume, Nume, Nota. Acestea se mai numesc i elemente. De asemenea, un tag poate conine i o serie de atribute, de exemplu Grupa. Fiecare tag trebuie s aib un tag corespondent de final, pentru a ti unde se termina. Acest tag de final are acelai nume ca i tag-ul iniial, dar este ntre caracterele </ >. Considerm fiierul SampleData.xml furnizat ca anex a laboratorului:
<?xml version="1.0" encoding="utf-8"?> <Studenti> <Student Grupa="1101"> <Prenume>Andrei</Prenume> <Nume>POPESCU</Nume> <Nota>10</Nota> </Student> <Student Grupa="1101B"> <Prenume>Mihai</Prenume> <Nume>IONESCU</Nume> <Nota>9</Nota> </Student> </Studenti>

Prima linie a fiierelor XML conine de obicei declararea XML. Aceasta conine versiunea XML folosit precum i codarea folosit. n funcie de necesiti, poate s conin i alte informaii. Dat fiind faptul c reperele element (tagurile) sunt textuale, pentru o gestionare adecvat a fiierelor xml trebuie ales un tip de codare (encoding=..) n acord cu lexicul vizat, pentru a fi interpretate corect diacriticele etc. Aceste fiiere XML pot fi cel mai uor ncrcate i inspectate prin deschiderea lor n browserele uzuale de internet.

2. Reprezentarea documentelor XML cu ajutorul unui arbore Unul din avantajele folosirii fiierelor XML este acela c organizarea datelor este descris n interiorul fiierelor. Structura de date ce corespunde cel mai bine datelor coninute n fiierele XML este un arbore de grad oarecare. Toate documentele XML trebuie s conin un element rdcin. Pentru exemplul considerat anterior acesta este <Studeni>. Elementele unui document XML formeaz un arbore. Toate elementele pot avea unele sub-elemente. Acestea vor fi reprezentate n arbore ca i copiii elementului respectiv. O structur general a arborelui XML este:
<root> <child> <subchild>.....</subchild> </child> </root>

Pentru exemplul considerat mai sus, arborele rezultat este prezentat n figura 1. Elementul rdcin este <Studenti>. Toate elementele <Student> sunt coninute n <Studenti>. Un element <Student> are 3 copii <Prenume> <Nume> <Nota>.

Figura 1. Structura arborescenta a fiierului SampleData.xml

3. Modaliti de citire a fiierelor XML Pentru a putea citi un fiier XML i pentru a putea folosi elementele sale constitutive n cadrul unui program C/C++, soluia recomandat este aceea de folosire a unei biblioteci ce ofer funcionalitile necesare. n mediul on-line se pot gsi nenumrate astfel de biblioteci i codul surs aferent, fiecare prezentnd att avantaje ct i dezavantaje. Pentru exemplificarea modalitilor de lucru cu aceste librrii, s-a ales librria tinyXML. Aceasta poate fi descrcat de la adresa: http://sourceforge.net/projects/tinyxml/ Aceast librrie este o librrie simpl ce poate fi uor integrat n orice program, fie n C ct i n C++. Documentaia aferent acestei librrii poate fi consultat la adresa: http://www.grinninglizard.com/tinyxmldocs/index.html Pentru a putea folosi librria, se descarc fiierul zip ce conine fiierele surs, exemple, documentaie etc., de la adresa: http://sourceforge.net/projects/tinyxml/files/tinyxml/2.6.2/ Din aceast arhiv se copiaz n directorul de lucru fiierele:

tinyxml.cpp tinyxml.h tinyxmlerror.cpp tinyxmlparser.cpp tinystr.cpp tinystr.h Aceste fiiere vor trebui incluse n proiectul n care se dorete prelucrarea fiierelor XML. Pentru folosirea bibliotecii standard C++, n fiierul tinyxml.h se adaug pe prima linie #define TIXML_USE_STL Codul surs folosit pentru afiarea element cu element al fiierului XML SampleData.xml este furnizat ca anex la acest laborator.

4. Exerciii 1. a. Deschidei fiierul SampleData.xml cu un browser de internet i verificai corectitudinea dpdv sintactic al acestuia. b. Utilizai programul test_xml_cpp_clr.exe furnizat n arhiva laboratorului pentru a vizualiza i inspecta structura arborescent a fiierului SampleData.xml. (ambele fiiere trebuie s se afle n acelai director) 2. Pe baza fiierelor furnizate n arhiva laboratorului (fiierele librriei tinyXML precum i fiierul xml.cpp n care este dat un exemplu de parcurgere a fiierului SampleData.xml), realizai o aplicaie care deschide fiierul XML SampleData.xml i afieaz elementele acestuia. 3. Creai o clas Student care s conin ca membri informaiile unui element <Student> din fiierul XML. 4. Creai un arbore de grad oarecare n care nodul rdcin s fie un nod de tip Studeni fr informaie util (fr membru atom). Copii acestui nod vor fi noduri n care Atomul va fi constituit din obiecte de tip Student. 5. Afiai arborele creat. 6. Convertii un fiier xml (cel creat anterior sau altul) ntr-un arbore, efectuai unele operaii cu acel arbore (adugai un nou element, tergei un element etc.) i salvai din nou arborele in fiierul xml.

S-ar putea să vă placă și