Documente Academic
Documente Profesional
Documente Cultură
L A B O R A T O R
10b
Arbori XML
1. Sa se defineasca un tip "Node" pentru un nod de arbore XML cu
urmatoarele campuri:
- val (char*) : adresa tag sau text
- fiu (Node*) : adresa primului fiu
- frate (Node*) : adresa primului frate
- parent (Node*) : adresa nod parinte
Sa se scrie si sa se verifice urmatoarele functii:
-
int main() {
Node* r, *p, *q;
r= make ("<preturi>");
addChild (r, (p=make("<produs>")));
addChild (p, make("cafea"));
addChild (p, q=make("<firma>"));
addChild (q, make("Elite"));
addChild (p, q=make("<pret>"));
addChild (q, make("10"));
addChild (r, (p=make("<produs>")));
addChild (p, make("ceai"));
addChild (p, q=make("<firma>"));
addChild (q, make("Lipton"));
addChild (p, q=make("<pret>"));
addChild (q, make("7"));
print (r,0); // afisare arbore
printf ("%d noduri\n", size(r));
getchar();
}
2. Sa se scrie si sa se verifice o functie parser XML care construieste un
arbore XML pe baza unui text ce contine un document XML:
Node* parse (char* xml); // rezultat = radacina arbore xml
Algoritm folosit:
creare nod radacina r cu primul tag
crt=r // pozitie curenta in arbore
repeta cat timp nu e sfarsit de text {
extrage urmatorul simbol in token
daca token este marcaj de inceput atunci {
creare nod "nou" cu valoare marcaj
adauga la crt pe nou
crt=nou
// coboara un nivel
}