marți, 28 iulie 2009

Lucru cu fisiere XML in ASP.NET

XML (Extensible Markup Language) reprezinta un limbaj de marcare prin care pot fi definite structuri ierarhice de date in fisiere de tip text. Acest limbaj a fost definit pentru a permite implementarea unei metode independenta de tehnologiile Web si pentru gestiunea bazelor de date existente care sa fie utilizata la descrierea si utilizarea datelor.

Principalele caracteristici ale tehnologiei XML sunt:
  • defineste un limbaj de marcare asemanator HTML si SGML;
  • definita pentru a permite descrierea structurilor de date si al datelor;
  • utilizata pentru a transporta date intre aplicatii si platforme diferite;
  • bazata pe utilizarea fisierelor text cu extensia .xml;
  • independenta de platformele hardware si software;
  • implementata de browser-ele Web existente
  • datele descrise formeaza o structura ierarhica.

Datele descrise prin limbajul XML sunt stocate in fisiere text cu extensia .xml in care trebuie respectate o serie de reguli (o descriere completa a limbajului poate fi gasita la www.w3.org/XML/):
  • limbajul este case-sensitive facand diferenta intre literele mari si mici;
  • tag-urile de descriere a datelor sunt definite de utilizator, spre deosebire de HTML unde sunt predefinite;
  • structura ierarhica trebuie sa contina un element radacina;
  • un element poate contine text, unul sau mai multe elemente sau nimic;
  • orice eticheta de inceput trebuie sa aiba asociata o eticheta de inchidere; daca elementul este gol, atunci eticheta de inceput poate fi inchisa prin simbolul /;
  • numele etichetelor trebuie sa inceapa cu o litera; numele xml, Xml, XML sunt rezervate;
  • comentariile sunt inserate intre ;
  • trebuie pastrata structura ierarhica si elementele trebuie sa fie imbricate in mod corespunzator (ordinea de inserare a etichetelor de inchidere este inversa celei de inserare a etichetelor de deschidere);
  • elementele pot avea atribute ale caror valori pot fi definite utilizand ghilimele sau apostrof.

Daca se doreste stocarea informatiilor despre angajatii unei firme intr-un fisier XMl, atunci o forma simpla de definire a acestuia este:

<angajati>
<angajat id=”123”>
<nume>Popescu Ion</nume>
<departament>Clienti</departament>
<functie>Manager</functie>
</angajat>
<angajat id=”123”>
<nume>Gheorghe Anca</nume>
<departament>Vanzari</departament>
<functie>Casiera</functie>
</angajat>
</angajati>

Pentru a permite o validare sumara a documentului XML si pentru a indica setul de caractere utilizat la descrierea continutului, la inceputul fisierului se da o declaratie de tipul

<?xml version="1.0" encoding="utf-8" ?>

Aceasta informatie nu este obligatorie insa repreinta o zona de descriere a documentului XML.

Pentru a afisa si prelucra aceste date dintr-o aplicatie ASP.NET se vor utiliza clase definite in framework-ul .NET si la care programatorul are acces prin API-ul (application programming interface) parser-ului XML inclus in framework. Acest parser implementeaza standardul XML DOM (Document Object Model) definit de consortiul W3C (www.w3.org/DOM) si reprezinta un document XML sub forma unei structuri arborescente in care elementele sunt reprezentate de noduri.
In namespace-ul System.Xml sunt definite clasele:
  • XmlReader – clasa abstracta utilizata pentru a citit date dintr-un fisier XML
  • XmlTextReader – implementeaza un parser XML derivat din XmlReader ce nu face validari si ce permite doar operatia de citire;
  • XmlWriter - abstracta utilizata pentru a scrie date intr-un fisier XML;
  • XmlTextWriter – implementeaza o clasa derivata din XmlWriter ce permite generarea unui document XML;
  • XmlDocument – implementeaza un parser XML conform specificatiilor XML DOM;
  • XmlNode – clasa asociata unui singur nod dintr-un document XML;
  • XmlNodeList – gestioneaza o lista de obiecte XmlNode;
  • XmlElement – un element din documentul XML
  • XmlAttribute – reprezinta un atribut al unui element din documentul XML
Daca se considera o pagina ASP.NET in care exista un buton si un label, LabelAngajati, conform structurii
<form id="form1" runat="server">

<div>

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Lista angajati" />

<br />

<br />

<asp:Label ID="LabelAngajati" runat="server"></asp:Label>

</div>

</form>

, afisarea datelor angajatilor din documentul XML la activarea butonului este realizata prin functia

protected void Button1_Click(object sender, EventArgs e)

{

XmlDocument doc = new XmlDocument();

//deschidere document XML local

doc.Load(Server.MapPath("angajati.xml"));


LabelAngajati.Text = "";

//generare lista noduri de tip angajat

XmlNodeList lista = doc.GetElementsByTagName("angajat");

//parcurgere lista noduri

foreach (XmlNode angajat in lista)

{

//preluarea valoare atribut nod curent

string id = angajat.Attributes["id"].Value;

//preluare valori noduri fiu

string functie = angajat["functie"].FirstChild.Value;

string nume = angajat["nume"].FirstChild.Value;

string departament = angajat["departament"].FirstChild.Value;

//afisare date preluate din fisierul XML

LabelAngajati.Text += "<strong>Angajat :" + nume + " - " + id + "</strong><br/>";

LabelAngajati.Text += "Functie :" + functie + "<br/>";

LabelAngajati.Text += "Departament :" + departament + "<br/>";

}

}



ce este abonata la evenimentul Click al controlului. In secventa anterioara, preluarea textului asociat unui element se realizeaza prin proprietatea FirstChild a nodului. Acelasi rezultat este obtinut, pentru valorile de tip text, prin proprietatea InnerText. De exemplu, extragerea numelui se face si prin

string nume = angajat["nume"].InnerText;

Un exemplu practic al utilitatii documentelor XML este dat de prelucrarea informatiilor cu privire la cursul valutar. Banca Nationala a Romaniei furnizeaza zilnic informatii valutare prin intermediul unui document XML publicat la adresa http://www.bnr.ro/nbrfxrates.xml. Transferand datele pe baza acestui suport este permisa realizarea unei multitudini de aplicatii, diferite ca tehnologie, pentru afisarea cursului valutar.
Prelucrarea documentului XML se face prin intermediul claselor .NET descrise anterior, insa se pune problema accesarii acestui fisier. Solutia eficienta este data de accesarea la distanta a documentului, iar acest lucru este posibil prin intermediul metodei Load a obiectului XmlDocument

doc.Load("http://www.bnr.ro/nbrfxrates.xml");

Parcurgerea ratelor de schimb se face cautand nodurile Rate.

Niciun comentariu:

Trimiteți un comentariu