Lucrul cu XML în aplicații .NET. Introducere în instrumentele moderne pentru lucrul cu XML

A trecut destul de mult timp de când am promis că voi vorbi despre lucrul cu date în format XML atunci când dezvoltăm aplicații .NET. Promisiunile trebuie respectate. Vă rugăm să rețineți că acest articol nu se adresează dezvoltatorilor profesioniști .NET, ci celor care nu au încă o experiență semnificativă în crearea de aplicații .NET.


De ce ar trebui să lucrăm cu XML?

Dacă nu aveți încă o idee foarte bună despre ce este XML, atunci vă recomand să citiți articolul „XML este serios și de mult timp” din „KV” Nr. pentru 2007. Pentru a economisi spațiu pentru lucruri mai importante, formatul XML în sine nu va fi analizat aici.

Înainte de a începe să vă familiarizați cu codul programului, trebuie să răspundeți la o întrebare fundamentală: de ce să includeți chiar și suport XML în aplicația dvs.? Cred că mulți și-au pus această întrebare cu privire la multe tehnologii și nu toate au fost incluse în aplicații după răspuns. Cu toate acestea, cu XML situația este oarecum diferită și există motive reale pentru a utiliza acest format în multe situații.

Principalul avantaj al XML este că, fiind un format text prin natură, permite totuși perfect stocarea și transmiterea oricăror date. Deoarece acest format este text, problema multiplatformei sale este rezolvată de la sine, iar problema transmiterii datelor XML este la fel de ușor de rezolvat (cum se face, de exemplu, în SOAP). În plus, puteți schimba cu ușurință formatul de transfer sau de stocare a datelor adăugând noi atribute și fără a vă face griji prea mult cu privire la compatibilitatea cu versiunile anterioare ale formatului, deoarece aplicațiile care folosesc versiunea veche vor putea citi ceea ce au nevoie fără să acorde atenție noilor. etichete sau atribute . Multe aplicații folosesc XML formate de fișiere, multe protocoale de transfer de date se bazează și pe XML, iar listele ambelor continuă să crească.

Desigur, pe de altă parte, XML nu este foarte economic, deoarece, după cum a remarcat corect unul dintre vizitatorii forumului Computer News, documentele XML constau adesea în 10% date și 90% etichete. Totuși, acest lucru depinde în mare măsură de etichetele pe care le alegeți. Poti sa scrii Sf. Melnikaite, 2, Pot sa . Deși, sincer, mi se pare că cu hard disk-urile actuale și canalele groase nu are rost să fii deosebit de comprimat.

Deci in în mâini capabile XML este un lucru puternic și convenabil și, datorită ubicuității acestui format, nu puteți scăpa de el. Deci, să trecem la scris codul programului.

Pentru programare vom folosi limbajul principal al platformei .NET - C#. Pentru ca cât mai mulți cititori să exerseze ei înșiși cu codul de program dat, voi folosi prima versiune de C# și .NET Framework.


Înregistrarea datelor

Mai întâi, să vorbim despre scrierea datelor, pentru că, știi, pentru a citi ceva de undeva, trebuie mai întâi să scrii ceva undeva. Și din moment ce tu și cu mine am început să programăm, nu este potrivit să creăm manual date XML. Deci, să începem mai întâi cu scrierea datelor în XML.

Pentru a începe, creați un nou proiect în Studio vizual, #Develop sau C# Builder și adăugați System.Xml la lista de spații de nume importate.

Responsabil pentru scrierea datelor XML în .NET Framework clasa speciala XmlTextWriter, care vă permite să scrieți date XML într-un flux arbitrar. Adică, noi, în general, îl putem folosi pentru a le scrie atât într-un fișier, cât și într-o bază de date și pentru a le trimite cuiva prin Internet, dar acum vom scrie totul într-un fișier. Puteți redirecționa ieșirea schimbând constructorul obiectului (adică, trecând în timpul inițializării nu numele fișierului și codificarea acestuia, ci un obiect care este un flux de date). Cu toate acestea, se pare că deja am început să mă devansez puțin. Să ne familiarizăm mai întâi cu codul responsabil pentru scrierea datelor în fișierul nostru XML.

String FileName = "c:\\demo.xml"; XmlTextWriter xml = XmlTextWriter nou (FileName, System.Text.Encoding.Unicode); xml.Formatting = Formatare.Indentat; xml.WriteStartDocument(); xml.WriteStartElement("element rădăcină"); pentru (int i = 0; i< 10; i++) { xml.WriteStartElement("subelement"); xml.WriteAttributeString("attrib1", "value1"); xml.WriteAttributeString("attrib2", i.ToString()); for (int j = 0; j < 10; j++){ xml.WriteStartElement("subsubelement"); xml.WriteAttributeString("attr", j.ToString()); xml.WriteEndElement(); } xml.WriteEndElement(); } xml.WriteEndElement(); xml.WriteEndDocument(); xml.Close();

Prima linie, cred, este destul de clară - este pur și simplu înregistrarea numelui fișierului în care vom salva datele. În continuare, creăm un obiect de tip XmlTextWriter (se numește, după cum puteți vedea, xml) și cu acesta vom efectua toate operațiunile ulterioare. Vă rugăm să rețineți că atunci când construim un obiect, specificăm și codarea în care va fi scris XML: în exemplul nostru, acesta este Unicode. Linia următoare, în general, nu este necesară, dar va face documentul nostru XML, așa cum se spune, să fie citit de om, adică va adăuga indentările necesare și îl va despărți în linii. Fără aceasta, întregul document ar fi scris într-o singură linie, ceea ce, deși economisește spațiu, îl face practic nepotrivit pentru editare manuală.

Scrierea documentelor începe prin apelarea metodei WriteStartDocument() a obiectului nostru xml. Rândul care îl urmează adaugă elementul rădăcină „rootelement” în documentul nostru XML (vă reamintesc că pentru documentele XML elementul rădăcină trebuie să fie prezent într-o singură copie). Apoi, într-un ciclu, adăugăm încă zece elemente care nu poartă nicio încărcare semantică documentului nostru XML, pentru fiecare dintre ele setăm două atribute și încă zece subelemente. Vă rugăm să rețineți că putem adăuga un număr la un șir fără a converti în mod explicit datele, dar dacă numărul trebuie să formeze complet un șir, atunci acesta trebuie convertit explicit folosind metoda ToString(). De asemenea, rețineți că trebuie să închidem în mod explicit fiecare dintre elementele documentului nostru XML și apoi întregul document.

Acum că documentul nostru XML a fost scris cu succes, să vedem cum putem citi datele din el.


Citirea datelor

Adăugați o componentă listBox la forma aplicației dvs. (cu excepția cazului în care, desigur, este o aplicație de consolă), astfel încât să puteți monitoriza rezultatul citirii fișierului XML. Ei bine, dacă programul dvs. este un program de consolă, atunci puteți redirecționa cu ușurință ieșirea către consolă.

Ca de obicei, să ne familiarizăm mai întâi cu codul programului și apoi ne vom uita la ce face exact acest cod.

XmlTextReader xml = new XmlTextReader(FileName); xml.WhitespaceHandling = WhitespaceHandling.None; int i = 0; în timp ce (xml.Read())( dacă ((xml.NodeType == XmlNodeType.Element) & (xml.Name == "subelement")) ( listBox1.Items.Add ("subelement " + i + " găsit") ; i++; listBox1.Items.Add(" " + xml.GetAttribute("attrib1")); listBox1.Items.Add(" " + xml.GetAttribute("attrib2")); while (xml.Read()&( xml.Name == "subsubelement"))( listBox1.Items.Add(" " + xml.GetAttribute("attr")); ) ) ) xml.Close();

Pentru citire, după cum probabil ați observat, folosim o altă clasă, și anume XmlTextReader. Este în același spațiu de nume ca și clasa pe care am folosit-o pentru a scrie datele. În prima linie, creăm o instanță de XmlTextReader, numită xml (aici presupunem că variabila FileName a fost deja definită de noi mai devreme). Pentru a sări peste liniile goale dacă apar în mod inexplicabil în fișierul XML tocmai creat, folosim rândul următorîn fragmentul de cod dat. Variabila i este folosită pentru a număra numărul de elemente „subelement” găsite în fișierul XML din care sunt citite datele.

Urmează ciclul de citire directă a datelor din fișier. Metoda Read() citește următorul element al documentului XML, iar după ce îl citim, verificăm exact ce citim. Dacă este într-adevăr un element „subelement”, atunci adăugăm informații despre elementul citit în listBox1, incrementăm o variabilă care conține numărul de elemente citite și apoi citim atributele elementului. După citirea atributelor, organizăm o buclă separată pentru a citi subelementele (rețineți că nu avem nevoie de un XmlTextReader separat pentru aceasta) și atributele acestor subelemente.Ca și mai înainte, introducem toate informațiile citite în listBox1 pentru a controla corectitudinea citind.

Când citiți fișiere XML, în același mod ca și când le scrieți, când construiți un XmlTextReader, puteți specifica ca parametru fluxul din care să citiți și apoi puteți citi nu numai din fișiere, ci și din alte surse, exemple de pe care am dat-o deja mai sus. Trebuie remarcată o caracteristică utilă a clasei XmlTextReader: atunci când citiți, nu încarcă în memorie întregul document XML citit, deci este convenabil să analizați documente XML mari (de exemplu, baze de date XML) .


În spatele scenelor

În general, exemplul pe care tocmai l-am discutat este prea simplu pentru proiecte reale. În zilele noastre, la citirea documentelor XML, acestea sunt de obicei validate folosind DTD, XML Schema sau Relax NG. Validarea înseamnă verificarea faptului că marcajul unui document XML este conform cu un standard descris în fișier extern. Validarea este necesară pentru ca verificarea documentelor să nu fie conectată în algoritmul programului, dar să poată fi schimbată în mod arbitrar atunci când formatul datelor se modifică fără a actualiza codul programului care citește sau scrie datele. Din păcate, acum nu vom avea timp să rezolvăm validarea, deoarece, după cum înțelegeți voi înșivă, volumul unui articol de ziar are anumite limitări.

Un alt punct practic interesant și util în ceea ce privește lucrul cu date XML este transformarea datelor XSL. Această transformare se aplică datelor atunci când sunt afișate pe pagini HTML și, de fapt, este pur și simplu aplicarea unui șablon de pagină web specific unui fișier XML care conține anumite date. Deoarece cea mai mare parte a utilizării curente a datelor XML este într-un fel sau altul La nivel mondial Web, atunci ar fi foarte, foarte bine să luăm în considerare transformările XSL.

Deci, cred că acest articol va avea o continuare - dar, bineînțeles, doar dacă tu însuți (adică cititorii Computer News) întrebați despre asta pe forum sau într-o scrisoare către e-mailul meu adresa poștală. Deocamdată cam folosind XMLîn aplicațiile .NET, poate, totul. Sper că aceste informații vă sunt utile.

Limbajul nu este fiul, ci tatăl gândirii.
Oscar Wilde

Abreviere XMLînseamnă extensibil Limbajul de marcare, tradus ca „limbaj de markup extensibil”. Ca limbaj HTML, este un subset al SGML (Standard General Markup Language) - „bunicul” limbajelor de marcare. Ne-am întâlnit deja de mai multe ori format XML. Acesta este formatul fișierele de configurare, un fișier care descrie sursele de date obiect.

XML este un standard universal, independent de platformă, pentru descrierea informațiilor care poate fi utilizat pentru a reprezenta date ierarhice și a unifica informatiile transmise. Fără cunoștințe, este imposibil să înțelegem SOAP și, prin urmare, serviciile web. XML a devenit standardul de facto pentru transmiterea datelor pe Internet. Standardul pentru XML și formatele asociate este definit de W3C (World Wide Web Consorţiu). De exemplu, creăm pagini aspx în format XHTML - de tranziție între HTML și XML, al căror standard este definit și de W3C. Standardul XHTML impune mai mult reguli stricte pe formarea corectă document, similar regulilor XML.

Să înțelegem principala diferență dintre XML și HTML. XML este conceput pentru a descrie datele și pentru a se concentra pe ceea ce este exact. HTML este conceput pentru a afișa date și se concentrează pe modul în care arată datele. Dacă în tradiţional Concepte HTML„prezentare” și „vizualizare” sunt adesea confundate, dar când lucrăm cu XML separăm clar aceste concepte. Spre deosebire de etichetele XML nu sunt predefinite de creatorii limbii Etichete HTML. Fiecare autor de document își definește propriile etichete.

Standardul cere ca un program care procesează un document XML să se oprească dacă întâlnește o eroare. Și dacă browserul detectează o etichetă neclară în HTML sau absența unei etichete de închidere, pur și simplu o ignoră.

La începutul unui document XML, declarația sau prologul acestuia apare întotdeauna. Indică versiunea Standard XML, căruia îi corespunde.

este o eroare în XML.

Etichetele pot avea atribute. Valorile atributelor trebuie să fie cuprinse între ghilimele. Ordinea atributelor nu contează. Este posibil să existe text între etichetele de deschidere și de închidere. XML păstrează toate spațiile găsite în text. Dacă nu există text, puteți utiliza o formă abreviată de notație. Exemplu de etichetă XML:

Aceasta este o formă scurtă a etichetei

Îți amintește asta de ceva? Regulile pentru descrierea elementelor ASP.NET sunt exact aceleași.

Există un atribut xmlns care definește spațiul de nume. Valoarea sa poate fi oricare nume unic. Există un acord de utilizare a adreselor URL, deoarece acestea sunt unice. Spațiile de nume au o semnificație similară utilizării lor în .NET Framework - pentru a nu încurca aceleasi nume, folosit de diferiți dezvoltatori. Numele spațiului de nume este separat de nume prin două puncte.

Fișierele XML reprezintă informații ierarhice care pot fi reprezentate ca un arbore cu o singură rădăcină.

Documentele XML care satisfac toate cerințele de sintaxă se numesc bine formate. Pentru descriere date XML folosește DTD (Document Type Definition) - definirea tipului de document. Dacă fișierul se potrivește cu DTD, acesta este considerat valid.

Browserele IE 6.0, FireFox 1.5 afișează fișiere XML cu evidențiere de sintaxă. Nodurile părinte pot fi extinse și închise. De exemplu, în închis Nodul rădăcină al fișierului BirthDay.xml arată astfel:

Mediile de dezvoltare Visual Studio și VWD Express verifică corectitudinea documentelor XML chiar în timpul editării.

AdRotator

Element de control AdRotator vă permite să arătați bannere publicitareși înlocuiți-le automat cu altele. Bannerele în sine sunt descrise într-un fișier XML sau altă sursă de date. Anunțul este actualizat de fiecare dată când pagina este reîmprospătată. Proprietatea AdvertismentFile specifică numele fișierului XML. Scheletul unui fișier XML este următorul.

În interiorul nodului Advertisements există noduri

Aceste noduri au 5 atribute, toate fiind opționale.

Un exemplu de fișier AdvertismentFile, se numește ads.xml.

fix.gif http://www.im.am Gazduire gratuita 40 gazduire logo2.jpg http://www.nv.am Ziarul „Timp nou” 50 știri vara.jpg http://www.utro.ru Cântăreața Jasmine a fost bătută de soțul ei! 100 știri galbene

Un element de control este plasat pe pagină. Proprietatea sa AdvertisementFile indică acest fișier.

Dacă proprietatea Cuvânt cheie este setată, controlul afișează numai reclame care se potrivesc cu conținutul său. Deoarece poate fi schimbată dinamic, publicitatea poate fi adaptată nevoilor utilizatorului. Cuvântul cheie trebuie să apară cel puțin o dată în fișierul publicitar, altfel va fi un dreptunghi gol în locul unui anunț.

În versiunile anterioare de ASP.NET, puteai lucra numai cu fișiere XML. Acum puteți utiliza orice sursă de date legând controlul sursei de date. În acest caz, trebuie să specificați cel puțin 3 câmpuri sursă în proprietățile ImageUrlField, NavigateUrlField și AlternateTextField.

Fișiere de conversie a documentelor

Se știe că CSS (Cascading Stylesheets) sunt adesea folosite pentru a formata fișierele HTML, deși acest lucru nu este necesar, deoarece browserele asociază un anumit aspect cu toate etichetele. Element

Setează paragraful - font bold - browserul știe cum să le arate.

Deoarece XML nu folosește etichete predefinite, semnificația lor poate fi orice:

ar putea însemna un tabel HTML sau ar putea însemna o masă din lemn. Prin urmare, browserele afișează documentele XML „ca atare”. De asemenea, puteți specifica fișiere CSS pentru documentele XML, dar acest lucru nu este recomandat.

Pentru a seta formatul de afișare al documentelor XML, se folosesc foi de stil XSL. XSL- Extensible Stylesheet Language este mult mai bogat în capabilități decât CSS. XSL este mai mult decât o foaie de stil.

Același fișier XML poate fi legat la diferite tabele XSL, inclusiv în mod programatic.

XSL este format din 3 părți:

  1. XSLT - o metodă de transformare a documentelor XML
  2. XPath - o metodă pentru specificarea părților și a căilor către elemente XML
  3. Obiecte de formatare XSL - metode de formatare a documentelor XML

Cea mai importantă parte a XSL este limbajul de transformare XSLT. Este folosit pentru a transforma documente XSL în alte tipuri de documente sau alte documente XSL. XSLT este adesea folosit pentru a converti un document XSL în format HTML.

Pentru a crea un document XSLT, selectați fișierul XSLT în dialogul de creare a fișierului. VS 2005 creează un cadru de foi de stil. Deoarece o foaie de stil este ea însăși un document XML, începe cu o declarație XML.

Dacă ai studiat CSS, știi că sunt folosite reguli de stil. O regulă constă dintr-un selector și o declarație de stil între acolade.

Această etichetă conține un fișier HTML șablon. Comentariul vă reamintește că trebuie să introduceți elemente XSL acolo.

Să ne uităm la crearea fișierelor XSLT folosind un exemplu. Creați un fișier XML „Quotes.xml” în folderul App_Data

Ne-am dorit ce e mai bun, dar a ieșit ca întotdeauna. Victor Cernomyrdin America este un continent numit astfel pentru că Columb l-a descoperit. Georges Elgozy Mă înfurie să mă gândesc cât de mult aș fi învățat dacă nu aș fi fost la școală. George Bernard Shaw Se inventează multe pentru a nu gândi. Karel Capek Dacă spui adevărul, tot vei fi prins mai devreme sau mai târziu. Oscar Wilde Ar trebui să fie președinte dacă nu este spânzurat înainte de atunci. Mark Twain

Pentru a scoate transformări XSLT pentru fiecare element XML, utilizați eticheta xsl:for-each XSL. Elementul :for-each localizează elemente în documentul XML și repetă modelul pentru fiecare.

Datele pot fi sortate folosind eticheta xsl:sort, care trebuie să fie în interiorul xsl:for-each element:

Aspectul final al fișierului de transformare:

Citate celebre

Citat Autor

Dacă doriți să vedeți rezultatul transformării documentului în browser, includeți o declarație după declarația XML

,

sau selectați Afișare ieșire XML din meniul XML și specificați fișierul de transformare.

Același document XML poate fi transformat folosind un alt fișier XSL:

Maeștri ai aforismului



Rezultatul vor fi citate separate printr-o linie orizontală.

Fișiere de definiție a schemei documentului

Conform standardului modern, un document valid trebuie să se potrivească cu fișierul asociat acestuia XSD(XML Schema Definition) - Un fișier de definire a schemei XML care definește un anumit limbaj, adică descrie ce elemente și tipuri pot apărea într-un document. Schemele XSD sunt destinate să înlocuiască DTD (Document Type Definition), diferența dintre ele este că fișierele XSD în sine folosesc și sintaxa XML. Schemele XSD vă permit să determinați ce etichete sunt permise, dacă sunt necesare sau nu, dacă pot fi repetate într-un document și așa mai departe. Astfel, XML descrie datele, iar XSD descrie structura acestor date sau metadate. În termeni de programare, XSD este o descriere a tipurilor, în timp ce un fișier XML descrie obiecte de aceste tipuri. Un proiect de lucru al standardului XSD 1.1 este disponibil la http://www.w3.org/TR/2003/WD-xmlschema-11-req-20030121/.

Fișierul de definire a schemei începe cu o descriere a prefixului spațiului de nume, care este apoi inclus în toate elementele fișierului. http://tempuri.org este folosit pentru a seta URI-ul pentru spațiile de nume ASP.NET.

De exemplu, această definiție specifică că elementul „Author”. tip șir, trebuie să apară o dată și o singură dată, iar dacă nu este specificat, ia valoarea „Pușkin”.

Parametrul maxOccurs="unbounded" specifică faptul că elementul poate apărea de orice număr de ori.

Parametrul ref vă permite să vă referiți la ceva deja descris în acest fișier un element sau un atribut global pentru a evita repetarea acelorași elemente.

  1. definiți tipuri simple și complexe.

XSD are tipuri predefinite - la fel ca .NET. Acestea sunt convertite în tipuri .NET în timp ce aplicația rulează. Pe baza acestora, puteți construi tipuri complexe similare structurilor limbajelor de programare. Un tip complex constă dintr-o secvență de declarații de elemente. Să definim un tip complex

Etichetă determină că elementele din acest tip trebuie să apară în ordinea specificată. Dacă eticheta ar fi folosită , atunci elementele ar putea apărea în orice ordine.

Etichetă similar cu o structură cu opțiuni. Specifică faptul că un element de un anumit tip trebuie să aibă doar unul dintre elementele sale imbricate.

Următorul exemplu definește un tip simplu imbricat în definiția elementului MyValue.

  1. Adăugați noi grupuri și grupuri de atribute.

O definiție de tip complex poate include atribute. Să presupunem că vrem să construim o schemă pentru un fișier ca acesta:

Atributele pot fi doar de tipuri simple.

  1. Adăugați adnotări.

Adnotările vă permit să inserați descrieri ale elementelor existente, adăugând astfel documentație la fișier.

Citate din diverși autori

este destinat cititorilor fișierului și pentru programele de procesare a fișierelor.

De asemenea, puteți edita fișiere XSD în Visual Studio 2005 prin sursă, și cu ajutorul unui designer. Pentru un document XML, puteți genera automat o schemă corespunzătoare. În fereastra de proprietăți ale documentului XML, puteți specifica atât un fișier de schemă, cât și un fișier de transformare. În acest caz, studioul verifică automat fișierul pentru conformitate cu schema și chiar și IntelliSense înlocuiește etichetele din acest fișier.

Clasa XmlReader

Folosind clasa XmlReader, puteți prelua date din documente XML mai rapid decât alte metode.

XmlReader este o clasă abstractă. Pentru a începe să citești, metoda statica Create primește un obiect din clasa XmlReaderSettings. Această funcție numără numărul de noduri dintr-un document.

folosind System.Xml; folosind System.IO; private int CountNodes(string xmlFile) ( int NodesCount=0; setări XmlReaderSettings = noi XmlReaderSettings(); settings.IgnoreWhitespace = true; settings.IgnoreComments = true; utilizând (XmlReader reader = XmlReader.Create(xmlFile, setări)) (în timp ce (setări) reader.Read()) ( dacă (reader.NodeType == XmlNodeType.Element) ( NodesCount++; ) ) returnează NodesCount; )

Clasa XmlReader vă permite să preluați clase CLR dintr-un document. Hai să avem un meniu de restaurant.

Să scriem o funcție care va calcula suma prețurilor și caloriilor din meniu.

protected void Page_Load(object sender, EventArgs e) ( int ItemsCount = 0; zecimal DishesTotal = 0; UInt16 CaloriesTotal = 0; XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; NameTable nt = nou NameTable(); = nt.Add(„alimente”); preț obiect = nt.Add(„preț”); obiect calorii = nt.Add(„calorii”); settings.NameTable = nt; string MenuFile = Path.Combine(Request.PhysicalApplicationPath , "menu.xml"); folosind (XmlReader reader = XmlReader.Create(MenuFile, setări)) ( în timp ce (reader.Read()) ( if (reader.NodeType == XmlNodeType.Element && food.Equals(reader.LocalName) )) ( ItemsCount++; ) if (reader.NodeType == XmlNodeType.Element && price.Equals(reader.LocalName)) ( DishesTotal += (UInt16)reader.ReadElementContentAsDecimal(); ) if (reader.NodeType == X.mlElementType) && calories.Equals(reader.LocalName)) ( CaloriesTotal += (UInt16)reader.ReadElementContentAsInt(); ) ) Response.Write(String.Format("Ați comandat (0) feluri de mâncare în valoare de (1:C), (2) calorii", ItemsCount, DishesTotal, CaloriesTotal)); )

Clasa XPathDocument

Clasa oferă citirea și stocarea în memorie a documentelor XML pentru transformări folosind XSL. Puteți naviga prin document în orice direcție și puteți obține acces aleatoriu la orice element folosind expresii XPath.

Să luăm documentul XML „Quotes.xml” și fișierul Transformări XSL„Citate.xsl”. Rezultatul transformării documentului XML va fi trimis în fluxul de ieșire al paginii.

<% XPathDocument doc = new XPathDocument(Server.MapPath("App_Data\\Quotes.xml")); XslCompiledTransform xsl = new XslCompiledTransform(); xsl.Load(Server.MapPath("App_Data\\Quotes.xsl")); xsl.Transform(doc, null, Response.OutputStream); %>

Datorită faptului că etichetele de tabel sunt definite în fișierul de transformare, pe pagină va apărea un tabel cu informațiile necesare.

Control XML

Controlul XML oferă o modalitate de a transforma un document XML folosind o foaie de stil XSL. Proprietatea DocumentSource vă permite să specificați fișierul XML în care se află datele, iar proprietatea TransformSource vă permite să specificați fișierul de transformare XSLT.

În exemplul anterior, același rezultat ar putea fi obținut prin plasarea unui control XML pe pagină.

XMLDataSource

Elementul sursă de date XMLDataSource oferă o modalitate simplă de a conecta documentele XML ca surse de date la elementele care afișează informații. De asemenea, puteți seta Solicitare XPath pentru a filtra datele. La fel ca SqlDataSource, vă permite să editați, să ștergeți și să adăugați înregistrări de date. Pentru a face acest lucru, trebuie să accesați obiectul XmlDataDocument aflat în el apelând metoda GetXmlDocument. După editare, documentul este salvat folosind metoda Salvare.

Spre deosebire de datele tabulare dintr-un SGBD, datele din fișierele XML sunt ierarhice, astfel încât XMLDataSource este convenabil pentru a lega controalele ierarhice, cum ar fi Menu.

Sintaxă XML Data Binding

Pe măsură ce aplicațiile folosesc datele XML din ce în ce mai frecvent, a fost introdusă o metodă pentru a lega datele obținute dintr-o sursă XMLDataSource.

Aceste metode funcționează în același mod ca Bind și Eval, care au fost discutate în Lectura 7.

Să aplicăm această sintaxă unui element DataList care primește date de la un XmlDataSource:

Concluzie

În această prelegere ne-am uitat la lucrul cu date tip XML. XML oferă metoda universala pentru a descrie și a face schimb de informații structurate, independent de aplicații și dezvoltatori. Acest lucru completează luarea în considerare a lucrului cu surse de date.

Scopul lucrării: dobândiți abilități practice în procesarea datelor prezentate în formatul Extensible Markup Language ( XML).

Obiectivele postului:

– studiul tehnologiei de descriere a datelor XML;

– studiul clasele principale de bibliotecă FCL, susținând prelucrarea datelor prezentate în format XM L;

– finalizați o sarcină practică privind dezvoltarea unei aplicații în C#.

Informații teoretice scurte

Format XML este o modalitate de stocare a datelor într-un format text simplu, ceea ce înseamnă că datele pot fi citite de aproape orice computer. Această împrejurare face ca acest format să fie foarte potrivit pentru utilizarea la transmiterea datelor prin Internet și poate fi chiar citit direct de către o persoană.

XML este un limbaj de marcare care poate fi folosit pentru a descrie date arbitrare. Pe baza acestui limbaj este posibil să se organizeze stocarea informațiilor și schimbul acestora, independent fie de aplicațiile specifice, fie de platforma pe care sunt executate.

XML- documentație. Setul de date completat este cunoscut în XML ca XML-document. XML-un document poate fi un fișier fizic de pe computer, sau poate fi doar o linie în memorie, dar trebuie să fie complet și să respecte anumite reguli. XML-documentul este format din mai multe părți diferite, dintre care cele mai importante sunt XML elemente care conţin datele care alcătuiesc efectiv documentul.

Microsoft. NETCadru utilizează un model de date obiect XML Obiect document Model( DOM) pentru a oferi acces la date în XML-documente, și clase suplimentare pentru a citi, a scrie și a naviga în interior XML-document. Aceste clase sunt suportate de spațiul de nume System.XML. Un exemplu de descriere a unui catalog de cărți în DOM este prezentat în Fig. 8.1.

Descrierea unui document XML include declarații scrise în conformitate cu cerințele sintaxei sale. În timp ce creați XML-document în loc să folosească un set limitat anumite elemente Este posibil să vă creați propriile elemente și să le atribuiți orice nume pe care utilizatorul le alege. Acesta este motivul pentru care Limbajul XML este extensibil. În consecință, acest limbaj poate fi folosit pentru a descrie aproape orice document: de la o partitură muzicală la o bază de date.

Catalog

Orez. 8.1. Structura ierarhică a documentului

De exemplu, un catalog de cărți ar putea fi descris așa cum se arată în Lista 8.1 (numerele rândurilor nu fac parte din document XML). Pentru a crea XML-document în mediu VizualStudio . NET ar trebui să folosești comanda Fişier\ NouFişierși selectați numele șablonului din lista verticală de șabloane XMLFişier.

Lista 8.1. Text XML-document

    C#2005 pentru profesioniști

    Christian Nagel

    1560

    800

    2006

    C# în sarcini și exemple

    Nikita Kultin

    240

    350

    2007

Rândul 1 al acestei liste conține un anunț XML, identificând textul ca document XML.În ciuda opționalității anunțului XML, documentul trebuie să îl includă pentru a identifica versiunea utilizată XML, întrucât documentul este fără declarație XML pot fi considerate în continuare ca fiind adecvate ultima versiune XML, care poate duce la erori. Parametru de informare versiune indică versiunea XML, utilizat în document, parametru codificare– codificarea documentelor ( utf-8).

Rândul 2 conține un comentariu care începe cu caracterele . Comentariile pot fi postate pe tot parcursul XML-document.

ÎN XML- datele documentului sunt marcate folosind Etichete(elemente), care sunt nume cuprinse între paranteze unghiulare ( < > ). Etichetați numele în XML-document (cum ar fi CATALOG, CARTE,TITLU,AUTOR,PAGINI,PREȚ, PDATA din Lista 8.1) nu sunt definiții ale limbajului XML și sunt atribuite atunci când documentul este creat. Pentru etichete puteți alege orice nume specificate corect, de exemplu INVENTARîn loc de CATALOG sau ARTICOLîn loc de CARTE. Linia 3 conține eticheta rădăcină - CATALOG, care deschide marcarea întregului document. Când termină de scris eticheta rădăcină, cadrul inserează automat eticheta de final (linia 18 din Listarea 8.1), marcând-o cu simbolurile .

Notă. Încercarea de a crea mai mult de un element rădăcină în XML-documentul este o eroare.

Elementul rădăcină poate conține un număr arbitrar de elemente imbricate. În Lista 8.1 XML-documentul are o structură ierarhică sub formă de arbore cu elemente imbricate în alte elemente și cu un element de nivel superior Element de document, sau Element rădăcină(în exemplul nostru - CATALOG), care conține toate celelalte elemente. Element rădăcină CATALOG include elemente descendente CARTE. La rândul său, elementul CARTE constă din elemente descendente TITLU, AUTOR,PAGINI,PREȚ, PDATA.

Documente XML bine formate. Documentul este numit corect format(bine format) dacă îndeplinește următorul set minim de reguli pentru XML-documente:

XML-documentul trebuie să aibă un singur element rădăcină - element Document. Toate celelalte elemente trebuie să fie imbricate în elementul rădăcină;

– elementele trebuie imbricate în mod ordonat. Dacă un element începe în interiorul altui element, atunci trebuie să se termine în interiorul acelui element;

– Fiecare element trebuie să aibă o etichetă de început și de sfârșit. Spre deosebire de HTML, XML nu permite omiterea etichetei de sfârșit chiar dacă browserul este capabil să determine unde se termină elementul;

– numele elementului din eticheta de început trebuie să se potrivească exact (se face distincția între majuscule și minuscule) cu numele din eticheta de final corespunzătoare;

– numele elementului trebuie să înceapă cu o literă sau un caracter de subliniere ( _ ), urmat de litere, cifre și simboluri: punct ( . ), liniuță ( - ) sau subliniere.

Acestea sunt regulile de bază pentru formarea corectă XML-document. Alte concepte ale limbajului XML (atribute, primitive, relații) au propriile reguli care trebuie respectate. Putem spune că dacă un document este creat corect și nu apar erori la afișarea sau utilizarea acestuia, atunci acesta este un document format corect. Dacă faci o greșeală în orice etichetă HTML-page, atunci browserul va ignora pur și simplu eticheta corespunzătoare, iar eroarea se află în etichetă XML-pagina va face imposibilă afișarea acesteia. Dacă una dintre erori este prezentă, analizorul este integrat în Internet Explorer (uneori numit XML-procesor, sau parser) determină poziția acestuia

Clasele de bibliotecă FCL pentru citirea fișierelor XML. Lucrând cu XML-documentele suportă următoarele clase de bibliotecă FCL: XmlTextReader, XmlDocument, XPathNavigator.

Clasă XmlTextReader este o clasă abstractă care efectuează citirea și oferă livrare rapidă a datelor necacheate.Această abordare este cea mai puțin costisitoare în ceea ce privește resursele serverului, dar forțează ca datele să fie preluate secvenţial, de la început până la sfârșit.

Clasă XmlDocument reprezintă o implementare a modelului DOM. Această clasă păstrează datele în memorie după apelarea unei metode Sarcină() pentru a le prelua dintr-un fișier sau flux, oferă o vizualizare arborescentă a documentului în memorie cu capabilități de navigare și editare și, de asemenea, vă permite să modificați datele și să le salvați înapoi în fișier.

Clasă XPathNavigator la fel ca clasa XmlDocument, se păstrează în memorie XML- întreg documentul. Oferă capabilități avansate de căutare a datelor, dar nu oferă posibilitatea de a face modificări sau de a le salva.

Clasă XmlTextReader. Să ne uităm la un exemplu simplu. Așezați elemente pe formular richTextBoxȘi buton(Fig. 8.2). Când faceți clic pe un buton de pe un element richTextBox Fișierul al cărui conținut a fost prezentat în Lista 8.1 va fi încărcat. Codul pentru funcția apelată când se face clic pe butonul este afișat în Lista 8.2.

Orez. 8.2. Rezultatele citirii din Xml-document

Lista 8.2. Cod de gestionare a clicului pe buton

//Curăţarea elementului richTextBox1

richTextBox1. clar();

// Apelați o metodă statică Crea() returnarea unui obiect de clasă

// Fișier carte.xml se află în aceeași locație cu fișierul executabil

// programe

// Metoda Citit() trece la nodul următor Xml-document

în timp ce (rdr.Read())

dacă(rdr.NodeType ==XmlNodeType.Text)

richTextBox1.AppendText(rdr.Value + „\r\n”);

Clasă XmlReader poate citi și date puternic tastate. Există mai multe metode ReadElementContentAs, realizand lectura, printre care ReadElementContentAsDecimal(),ReadElementContentAsInt() ,ReadElementContentAsboolean() si etc.

Lista 8.3 arată cum să citiți valorile în format zecimal și să efectuați operații matematice asupra lor. În acest caz, prețul elementului crește cu 25%. Rezultatele rulării acestui cod sunt prezentate în Fig. 8.3.

Orez. 8.3. Citirea rezultatelor din Xml - document

numai titluri și prețuri ale cărților

Lista 8.3. Citirea datelor cu verificare puternică a tipului

// Curățarea elementului richTextBox1

richTextBox1. clar();

// Creați un flux de citit dintr-un fișier carte. xml

XmlReader rdr = XmlReader.Create("book.xml");

în timp ce (rdr.Read())

if (rdr.NodeType == XmlNodeType.Element)

// Verificarea numelui elementului

dacă (rdr. Nume == " PREȚ")

// Metoda ReadElementContentAsDecimal() execută

// convertește conținutul elementului în tip zecimal

preţ zecimal = rdr.ReadElementContentAsDecimal();

richTextBox1.AppendText("ActualPreț= " + preț +

"freca\r\ n");

// modificarea pretului cu 25%

pret += pret * (zecimal).25;

richTextBox1.AppendText("NouPreț= " + preț +

" freca\r\n\r\n");

else if (rdr.Name == „TITLU”)

richTextBox1.AppendText(rdr.ReadElementContentAsString() + „\r\n”);

Clasă XmlDocument. Această clasă și clasa sa derivată XmlDataDocument folosit în bibliotecă .NET pentru a reprezenta modelul obiect al documentului DOM.

Spre deosebire de clasă XmlReader, Clasa XmlDocument oferă nu numai capacități de citire, ci și de scriere, precum și acces aleatoriu la arbore DOM.

Să ne uităm la un exemplu în care este creat un obiect al unei clase XmlDocument, documentul este încărcat de pe disc și este afișată o fereastră de listă cu titlurile cărților (Fig. 8.4).

Orez. 8.4. Afișați titlurile cărților într-o listă.

În clasa formularului de aplicație, creați un obiect de clasă XmlDocument:

XmlDocument_doc = nou XmlDocument();

Codul de gestionare a clicurilor pe buton este afișat în Lista 8.4.

_doc.Load("carte.xml");

// Obțineți doar acele noduri care sunt necesare

XmlNodeListnodeLst = _ doc. GetElementsByTagName(" TITLU");

// Vizualizare în bucla de clasă XmlNodeList

pentru fiecare (XmlNodenodulînnodeLst)

listBox1. Articole. Adăuga(nodul. InnerText);

Să introducem în aplicație posibilitatea de a afișa informații despre o carte al cărei titlu este evidențiat în listă, pentru care vom adăuga un handler de evenimente listBox1_ SelectedIndexChanged așa cum se arată în Lista 8.5.

Lista 8.5. Managerul de clicuri pe elementul din listă

private void listBox1_SelectedIndexChanged (expedător obiect, EventArgs e)

// Creați un șir de căutare

string srch = "CATALOG/CARTE";

// Căutați date suplimentare

XmlNode foundNode = _doc.SelectSingleNode(srch);

dacă (foundNode != null)

MessageBox.Show(foundNode.OuterXml);

MessageBox.Show("Nu a fost găsit");

Rezultatele aplicației sunt prezentate în Fig. 8.5.

Orez. 8.5. Afișarea informațiilor despre elementul din listă selectat

Folosind o clasă XmlDocument De asemenea, puteți introduce noduri într-un document existent folosind metoda Crea- Element() .

De exemplu, pentru a crea un element nou CARTE trebuie sa scrieti urmatorul cod:

XmlElement newBook ​​​​= _doc.CreateElement(„CARTE”);

Creați elemente imbricate într-un element CARTE, puteți folosi următorul cod:

// Creați un element nou AUTOR

XmlElement newAuthor = _doc.CreateElement("AUTOR");

newAuthor.InnerText = „C.Baydachny";

Codul complet al manipulatorului de clic pe buton este prezentat în Lista 8.6, rezultatele funcționării acestuia sunt prezentate în Fig. 8.6.

Lista 8.6. Manerul de clic pe buton

privatgolbuton1_ Clic(obiectexpeditor, EventArgse)

_doc.Load("carte.xml");

XmlElement newBook ​​​​= _doc.CreateElement(„CARTE”);

// Creați un element nou TITLU

XmlElement newTitle = _doc.CreateElement("TITLE");

newTitle.InnerText = „.NET Framework 2.0”;

newBook.AppendChild(newTitle);

// Creați un element nou AUTOR

XmlElement newAuthor = _doc.CreateElement("AUTOR");

newAuthor.InnerText = „C.Baydachny";

newBook.AppendChild(newAuthor);

// Creați un element nou PAGINI

XmlElement newpages = _doc.CreateElement("PAGES");

newpages.InnerText = "498";

newBook.AppendChild(pagini noi);

// Creați un element nou PREȚ

XmlElement newprice = _doc.CreateElement("PRICE");

newprice.InnerText = "590";

newBook.AppendChild(newprice);

// Creați un element nou PDATA

XmlElement newpdata = _doc.CreateElement("PDATA");

newpdata.InnerText = "2006";

newBook.AppendChild(newpdata);

// Adăugați la documentul curent

_doc.DocumentElement.AppendChild(newBook);

// Scrieți documentul pe disc

XmlTextWriter tr = new XmlTextWriter("bookEdit.xml", null);

tr.Formatting = Formatare.Indentat;

_doc.WriteContentTo(tr);

tr. Închide();

XmlNodeListnodeLst = _ doc. GetElementsByTagName(" TITLU");

// Vizualizare în bucla de clasă XmlNodeList

pentru fiecare (XmlNodenodulînnodeLst)

listBox1. Articole. Adăuga(nodul. InnerText);

Când folosiți clase XmlDocumentȘi XmlReader Trebuie luate în considerare următoarele caracteristici. Dacă aveți nevoie de acces aleatoriu la un document, ar trebui să utilizați clasa XmlDocument, iar dacă aveți nevoie de un model de threading, atunci clase bazate pe clasă XmlReader. Clasă XmlDocument este foarte flexibil, dar cerințele sale de memorie sunt mai mari decât cele ale clasei XmlReader, iar performanța la citirea unui document este mai scăzută.

Orez. 8.6. Fereastra de rulare a aplicației

cu nod adăugat

Clasă XPathNavigator. Clasă XPathNavigator face parte din spațiul de nume Sistem. Xml. XPath, conceput pentru a crește performanța. Acest spațiu oferă doar citirea documentelor, prin urmare nu există instrumente de editare în el, iar clasele sunt construite pentru a asigura o execuție rapidă pe un anumit spațiu. XML-bucle de documente și operații de selecție în stil cursor.

Cel mai bun mod de a folosi clase dintr-un spațiu de nume Sistem. Xml. XPath este vizualizarea documentelor carte. xmlîntr-un ciclu.

Așezați elemente pe formular listBoxȘibuton. Codul de gestionare a clicurilor pe buton este prezentat în Lista 8.7, rezultatele executării acestui cod sunt prezentate în Fig. 8.7.

Lista 8.7. Manerul de clic pe buton

privatgolbuton1_ Clic(obiectexpeditor, EventArgse)

// Creați un obiect cu nume doc clasă XPathDocumentși transfer

// în constructorul numelui său XML- fişier carte.xml

XPathDocument doc = new XPathDocument("book.xml");

// Creați un obiect cu nume nav clasă XPathNavigator bazat pe obiect

// XPathDocument. Un obiect nav poate fi folosit doar în citire

XPathNavigator nav = ((IXPathNavigable)doc). CreateNavigator();

// Creați un obiect XPathNodeIterator pentru nodurile directoare

// și nodurile sale copil

XPathNodeIterator iter = nav.Select("/KATALOG/BOOK");

în timp ce (iter.MoveNext())

// Metoda Selectați descendenții() clasă XPathNavigator selectează totul

// nodurile descendente ale nodului curent care îndeplinesc condițiile de selecție

XPathNodeIterator newIter =

Lucrul cu date XML în aplicațiile ASP.NET 2.0, obiectul XmlDataDocument și controlul XML

Acest modul se concentrează pe modul în care puteți lucra cu date XML din aplicațiile ASP.NET.

XML înseamnă Extensible Markup Language, deși XML în sine nu este un limbaj. XML este un set de reguli folosite pentru a vă crea propriile limbaje de marcare. De exemplu, imaginați-vă că avem următoarele date despre un angajat:

Aceste date, desigur, pot fi prezentate în orice mod doriți: ca tabel într-o bază de date relațională, ca tabel Excel sau HTML, ca tabel într-un document Word sau ca document text ASCII, ca fișier *.csv , etc. Dacă le prezentăm în formatul limbajului de marcare compatibil cu XML ABML (Address Book Markup Language) pe care l-am inventat, ele vor arăta astfel:

Alexandru Ivanov

Nevsky pr, 1

Saint Petersburg

555-55-55

Câteva despre cum să descifrați acest cod. Primele două rânduri sunt un prolog (folosirea lui este, în principiu, opțională, dar foarte recomandată). Linia

se numește Declarație XML și indică faptul că acest fișier este conform cu specificația XML 1.0, adoptată ca recomandare de World Wide Web Consortium la 10 februarie 1998. Linia

se numește Definiție tip document și înseamnă că structura limbii căreia îi corespunde acest document este descrisă în fișierul abml.dtd (puteți folosi și DTD-uri interne atunci când descrierea limbii este localizată direct în document). În zilele noastre, mai degrabă decât DTD-urile, XML Schema este folosită mai des pentru a descrie structura limbilor compatibile cu XML - sunt mai ușor de accesat și oferă mai multe capabilități, în special atunci când descriu diferite tipuri de date. Aceeași linie care folosește XML Schema ar putea arăta astfel:

în funcție de locul în care se află Schema în sine - descrierea acestui limbaj - în fișierul abml.xml sau pe serverul Web (stocare schema corporativă de la Microsoft - BizTalk Server).

Un exemplu de schemă XML pentru limba noastră ar putea arăta astfel:

xmlns="urn:schemas-astrosoft-ru:abml maxOccurs="*" />

XML este un set formalizat de reguli pentru „marcarea” unui document, adică evidențierea structurii sale logice. Ceea ce este în interiorul oricărui document compatibil XML poate fi împărțit în două categorii: marcaj și conținutul în sine. Toate informațiile de marcare trebuie să înceapă fie cu un caracter ampersand (&), fie cu un caracter paranteză unghi stânga (<). В XML существует шесть типов информации разметки: элементы, атрибуты, комментарии, инструкции обработки, ссылки на сущности и разделы CDATA.

· Elemente(elemente) este cel mai comun tip de informații de marcare. Elementul identifică o componentă logică a unui document. Un document tipic constă în etichete de deschidere și de închidere, care pot înconjura conținut, un alt element sau ambele. Etichetele cu nume de elemente sunt incluse între paranteze unghiulare. Iată un exemplu de element:

4296 Razor Hill Road

· Atribute(atributele) constau dintr-o pereche nume de atribut/valoare atribut și sunt aplicate elementelor. Atributele trebuie plasate după numele elementului în eticheta de deschidere. De exemplu, atributele sunt lățimea și înălțimea:

· Comentarii(comentarii) este orice text care va fi ignorat de procesorul XML. Exemplu:

· Instrucțiuni de procesare(instrucțiuni de procesare) sunt folosite pentru a transmite informații aplicației care procesează documentul XML. Sintaxa instrucțiunii de procesare arată astfel:

· Referințe de entitate Referințele de entități sunt folosite pentru a plasa caractere rezervate sau cuvinte rezervate într-un document. De exemplu, trebuie să inserăm un parantez unghi stâng (<), которая является зарезервированным символом XML. Просто так вставить в текст документа мы ее не сможем: приложение, работающее с документом, решит, что она относится к разметке. Поэтому нам необходимо использовать сочетание символов <. lt означает mai puțin decât(mai mic decât), iar ampersand (&) și punct și virgulă (;) evidențiază o referință de entitate.

· secțiunea CDATA(secțiunea CDATA) este o bucată de text care nu este procesată ca și restul documentului XML, ci este transmis direct aplicației. Acest instrument poate fi util, de exemplu, atunci când se transmite un cod către o aplicație.

Principii de sintaxă XML:

· Documentele XML sunt compuse din caractere Unicode (Unicode este un set de caractere pe 16 biți care permite afișarea documentelor în orice limbă).

· XML este sensibil la majuscule. Etichete Și există diferite etichete în el.

· Spațiile albe sunt caractere invizibile, cum ar fi spațiu (ASCII 32), tab (ASCII 9), returnări de cărucior (ASCII 13) și avansuri de linie (ASCII 10). Spațiul alb este ignorat în etichete, dar este păstrat în datele de caractere (adică între etichetele de deschidere și de închidere). Spațiul alb din datele de caractere este transmis aplicației de procesare.

· Multe componente XML trebuie să aibă nume (cel mai evident exemplu fiind elementele și atributele). Regulile de denumire XML sunt următoarele: Numele XML trebuie să înceapă cu o literă sau liniuță de subliniere, urmată de orice număr de litere, cifre, cratime, litere de subliniere sau puncte, de exemplu:

My_Unique_Tag_Identifier-123 2_Acest_nume_este_incorect

· Numele componentei XML nu poate începe cu caractere xml (fie majuscule, fie minuscule). Astfel de nume sunt rezervate de creatorii specificațiilor în scopuri oficiale.

· Valorile caracterelor trebuie să fie cuprinse între ghilimele simple sau duble.

· În XML, ordinea de imbricare a etichetelor trebuie respectată cu strictețe.

· Orice etichetă de deschidere în XML trebuie să aibă o etichetă de închidere corespunzătoare.

· O etichetă goală în XML este scrisă ca o etichetă de deschidere, precedată de o paranteză în unghi drept cu o bară oblică (/).

· Nu poate exista decât un singur element rădăcină într-un document XML.

Care sunt avantajele stocării datelor în XML față de formatele binare tradiționale? De ce majoritatea producătorilor importanți de software fie trec complet la lucrul cu date într-un format compatibil XML (de exemplu, Microsoft Office 2003), fie intenționează să treacă în viitorul apropiat? Motivul principal este că datele XML sunt foarte ușor de transferat între o mare varietate de aplicații și foarte ușor de transformat. Puncte suplimentare legate de beneficiile XML:

  • Format de date independent - datele în format XML pot fi deschise în orice aplicație compatibilă cu XML (mai precis, compatibilă cu o anumită schemă). Exemplu: la orice întreprindere, documentele sunt stocate într-o varietate de formate - formate ale diferitelor versiuni de Word, text, HTML, PDF etc. Din această cauză, apar o mulțime de probleme, care pot fi rezolvate radical cu ajutorul XML.
  • Principiul general este o singură sursă de date (document XML), mai multe vizualizări. Acest lucru poate fi demonstrat clar folosind exemplul unui site Web care trebuie accesat din browsere diferite și prin WAP.
  • Transfer de date mult mai ușor „prin” aplicații. Exemple sunt trecerea documentelor printr-un lanț de aprovizionare sau trecerea datelor între produse software diferite într-o întreprindere (ceea ce este necesar foarte des).
  • Capacități îmbunătățite de căutare a datelor. În primul rând, nu este nevoie să accesați documente de diferite formate binare, iar în al doilea rând, structura ierarhică a documentelor XML facilitează căutarea.
  • Dezvoltare mai ușoară a aplicațiilor - Nu este nevoie să implementați suport pentru un număr mare de formate de date binare diferite în aplicații.
  • Datele în format text (XML - standard Unicode) sunt mai ușor decât binare de stocat pe diverse platforme și mai sigure (din punct de vedere al absenței codului binar rău intenționat) pentru a fi transmise prin rețele. O directie intreaga in dezvoltarea aplicatiilor este serviciile Web XML.

XML bine format este un cod XML care se conformează cerințelor de sintaxă ale acelui limbaj (de exemplu, fiecare etichetă de deschidere are o etichetă de închidere corespunzătoare). XML valid este valid în ceea ce privește structura logică a limbajului (de exemplu, elementele sunt imbricate corect), așa cum este definit în DTD sau Schema XML.

Un pic de terminologie XML care va fi folosit în acest curs:

· XSD - XML ​​​​Schema Definition, o descriere a structurii unui document XML folosit în mod obișnuit în VS .NET. De obicei se află în fișiere cu extensia *.xsd. Etichetele speciale sunt utilizate în interiorul schemei . Fiecare element marcat cu acest prefix aparține Schemei XML. În cadrul XML Schema puteți utiliza spații de nume. De exemplu, pentru a indica faptul că două spații de nume aparținând Schemei XML W 3C și Schemei de date Microsoft Office 10 sunt utilizate într-o schemă, puteți utiliza eticheta

xmlns:od="urn:schemas-microsoft-com:officedata">

Pentru a defini un element șir Nume într-o schemă care poate apărea de 0 sau mai multe ori într-un document, puteți, de exemplu, să utilizați următoarea etichetă:

tip="șir">

· pentru a descrie transformările documentelor compatibile cu XML, sunt folosite documente într-un limbaj de programare special XSLT (eXtensible Stylesheet Language Transform). Limbajul în sine este, desigur, și compatibil cu XML. XSLT utilizează trei tipuri de documente:

o document sursă. Acest document XML este „input” pentru transformare. În cazul nostru, acesta ar putea fi un document ca acesta:

xml-stylesheet type="text/xsl" href=" Angajații1.xsl"?>

Stuart Munson

Programator

Robert Brown

Tester

o Document de foaie de stil XSLT - un document compatibil cu XML care descrie regulile pentru efectuarea transformărilor. În cazul nostru, un exemplu al acestui document ar putea fi astfel:

xmlns:xsl=" http://www.w3.org/1999/XSL/Transform"

versiune=" 1.0 ">



o document - rezultatul transformărilor. De exemplu, la aplicarea transformării noastre, numele angajatului va fi marcat cu roșu, iar poziția sa va fi marcată cu albastru.

· XPath este un limbaj special care poate fi folosit pentru a naviga printr-un arbore de elemente XML. Când se utilizează modelul obiect XPath, un document XML este reprezentat ca un arbore de noduri. Informațiile sunt conținute în proprietățile acestor noduri.

· DOM (Document Object Model) - reprezentarea unui arbore de document XML în RAM. DOM vă permite să navigați și să editați un document XML. Proprietățile, metodele și evenimentele DOM standard sunt definite într-un document adoptat de W3C. În ASP.NET, puteți utiliza DOM pentru a crea un document XML și a-l trimite către browserul utilizatorului. O altă opțiune este ca un script client să creeze un document XML pe client folosind DOM și să îl trimită către serverul Web.

· XQuery este un limbaj specializat pentru interogarea informațiilor stocate în documente XML. XQuery se bazează în mare parte pe XPath.

Trebuie spus că XML este un format standard pentru lucrul cu date în ADO.NET. Despre formatul XML și cum poate fi utilizat cu DataSet - mai jos.

Posibilitățile de utilizare a XML atunci când lucrați cu DataSet sunt următoarele:

· Seturile de date pot serializa datele în format XML. Schema DataSet-ului (inclusiv tabele, coloane, tipuri de date și constrângeri) este definită într-o schemă XML (fișier .xsd).

· schimbul de date din DataSet cu clienții la distanță este necesar să fie efectuat în format XML;

· XML poate fi folosit pentru a sincroniza și transforma datele într-un DataSet.

Mai multe despre interacțiunea dintre XML și DataSet:

· nu puteți crea doar o schemă XML bazată pe un set de date (după cum am menționat mai sus, acest lucru se face folosind metoda WriteXmlSchema), ci și invers - generați un set de date pe baza informațiilor din schema lor XML (pentru aceasta, utilizați ReadXmlSchema metodă). Este posibil să generați un DataSet chiar și fără o schemă - pur și simplu pe baza unui document XML. Metoda InferXmlSchema este destinată acestui scop.

· este furnizată o metodă pentru obiectul DataSet CitițiXML, care vă permite să citiți un document text XML (un flux de date text XML) într-un set de date. O altă metodă ScrieXML, vă permite să salvați conținutul unui DataSet într-un format compatibil XML. Această caracteristică face foarte ușor organizarea schimbului de date între diferite aplicații și platforme.

· Puteți crea o reprezentare XML (obiect XmlDataDocument) pe baza informațiilor din DataSet. Se pare că puteți lucra cu informații dintr-un DataSet în două moduri: relațional convențional (cu DataSet-ul însuși) și metode XML. Ambele vizualizări sunt sincronizate automat (atunci când se fac modificări prin oricare dintre vizualizari).

· Puteți aplica transformări XSLT la datele care sunt stocate într-un DataSet.

Acum să vorbim despre cum arată toate acestea în practică.

Dim ds As New DataSet()

ds.ReadXml(Server.MapPath(„filename.xml”))

Metoda MapPath pentru un obiect special Server vă permite să convertiți calea virtuală a unui fișier dintr-o aplicație Web într-o cale fizică.

Dacă structura DataSet este generată automat din fișierul XML sau rămâne aceeași, depinde dacă a fost deja generată în acel DataSet și dacă a fost specificat parametrul opțional ReadXml XmlReadMode.

Dim ds As New DataSet()

Dim da As New SqlDataAdapter(_

„selectați * din autori”, conn)

da.Fill(ds)

ds.WriteXml(Server.MapPath(„filename.xml”))

Mai există două metode care vă permit să obțineți date în format XML dintr-un DataSet și să le puneți într-o variabilă șir. Acestea sunt metodele GetXml și GetXmlSchema. Un exemplu ar putea arăta astfel:

DimstrXmlDSLa fel deString =ds.GetXml()

Un DataSet conține adesea obiecte DataTable conectate între ele prin DataRelations (adică tabele cu o cheie primară și externă). La exportul în XML, informațiile din tabelul părinte pot fi completate cu informații din tabelul copil. Înregistrările din tabelul subordonat vor apărea ca elemente imbricate pentru înregistrările din tabelul principal. Pentru a implementa această caracteristică, trebuie să setați proprietatea Nested la True pentru obiectul DataRelation din DataSet (valoarea implicită este False).

Să presupunem că exportăm datele fără a folosi această proprietate:

Dim ds As New DataSet()

„Umpleți setul de date

...

Dim parentCol As DataColumn = _

ds.Tables(„Editori”).Columns(„pub_id”)

Dim childCol As DataColumn = _

ds.Tables(„Titluri”).Columns(„pub_id”)

ds.Relations.Add(dr)

ds.WriteXml(Server.MapPath("PubTitlesNotNested.xml"), _

XmlWriteMode.IgnoreSchema)

Codul XML arată astfel:

titlul 1

1

40.00

titlul2

2

60.00

titlu 3

1

30.00

1

pub1

2

pub2

iar acum îl folosim pentru a seta proprietatea Nested pentru obiectul DataRelation la True:

Dim dr As New DataRelation _

("TitlePublishers", parentCol, childCol)

dr.Nested = Adevărat

ds.Relations.Add(dr)

ds.WriteXML(Server.MapPath("PubTitlesNested.xml"), _

XmlWriteMode.IgnoreSchema)

Codul XML se dovedește complet diferit. Fiecare element de tip Pub conține elemente Titles lansate de acest editor:

1

pub1

titlul 1

1

40.00

titlu 3

1

30.00

2

pub2

titlul2

2

60.00

XmlDataDocument este o reprezentare XML în memorie a datelor dintr-un DataSet. Un XmlDataDocument este legat inextricabil de un DataSet. Orice modificări aduse XmlDataDocument sunt imediat reflectate în DataSet și invers. Mai jos vom vorbi despre tehnicile de lucru cu XmlDataDocument.

DataSet este o reprezentare relațională a datelor, în timp ce XmlDataDocument este ierarhic. Utilizarea XmlDataDocument este foarte convenabilă, deoarece lucrul cu date în format XML doar printr-un DataSet poate fi dificil. De exemplu, dacă încărcați date dintr-un fișier XML într-un DataSet și apoi le descărcați înapoi, se poate dovedi că fișierul va fi de nerecunoscut: formatarea se va pierde, foarte probabil ordinea elementelor, poate elemente care au fost ignorate din cauza la inconsecvență cu schema , definită pentru DataSet.

Puteți pune un document XML direct într-un XmlDataDocument sau îl puteți crea pe baza unui DataSet. Codul pentru prima opțiune ar putea arăta astfel:

Dim objXmlDataDoc ca nou XmlDataDocument()

objXmlDataDoc.Load(Server.MapPath(„fișier.xml”))

sau cam asa:

objXmlDataDoc.DataSet.ReadXml(Server.MapPath(„fișier.xml”))

Nu va fi nicio diferență.

Sau puteți crea mai întâi un DataSet, îl completați cu date și apoi creați un XmlDataDocument bazat pe acesta:

Dim ds As New DataSet()

'completați ds

...

Dim objXmlDataDoc ca nou XmlDataDocument(ds)

Odată ce obiectul XmlDataDocument este creat, puteți efectua diverse acțiuni asupra acestuia:

· leagă la DataGrid și alte controale:

dg.DataSource = objXmlDataDoc.DataSet

· obțineți șirul dorit (este returnat ca obiect XmlElement):

Dim elem Ca XmlElement

elem = objXmlDataDoc.GetElementFromRow_

(ds.Tabelele(0).Rândurile(1))

· utilizați setul complet de proprietăți și metode DOM. XmlDataDocument moștenește aceste proprietăți și metode din obiectul XmlDocument

· aplicați transformări XSLT (obiectele XslTransform sunt folosite în acest scop).

Aflați mai multe despre transformările XSLT:

XSLT vă permite să transformați un document XML sursă într-un alt document care diferă ca format și structură. De exemplu, folosind XSLT, un document XML poate fi convertit în cod HTML pentru afișare într-o aplicație Web. În ASP.NET pentru execuție Transformări XSLT Se folosește clasa XslTransform.

Cum e să lucrezi cu el?

· pentru a efectua transformări, mai întâi trebuie să creați un DataSet și XmlDataDocument corespunzător :

Dim ds As New DataSet()

'completați DataSet

...

Dim xmlDoc ca nou XmlDataDocument(ds)

· următoarea acțiune - creați un obiect XslTransform:

Dim xslTran ca nou XslTransform()

· utilizați metoda Load a acestui obiect pentru a încărca transformarea în el:

xslTran.Load(Server.MapPath(„PubTitles.xsl”))

· creați un obiect XmlTextWriter (va fi folosit pentru a afișa rezultatele transformării):

Dim writer As New XmlTextWriter _

(Server.MapPath("PubTitles_output.html")), _

Cod.Text.sistem.UTF8)

· Efectuăm transformarea în sine folosind metoda Transform a obiectului XslTransform. Această metodă are mai multe opțiuni. Un mod de a-l folosi ar putea arăta astfel:

xslTran.Transform(xmlDoc, Nimic, scriitor)

· închideți obiectul Writer:

scriitor.Închidere()

Pentru a lucra cu XML pe un formular Web, puteți face fără un obiect DataSet (și controale concepute pentru a afișa date dintr-o sursă relațională). În schimb, puteți utiliza XML Web Server Control. Vă permite să afișați documentele XML în sine sau rezultatele transformărilor lor pe o pagină Web. Codul XML poate fi transmis acestui control în diferite moduri:

· deschideți-le direct de pe disc (prin proprietatea DocumentSource). În acest caz (dacă nu ați aplicat transformări XSLT), documentul XML va fi scos la forma „ca atare”:

Exemplu XML

TransformSource="MyStyle.xsl" runat="server" />

· deschideți-le ca obiecte și transmiteți-le acestui control (prin proprietatea Document). În cazul nostru XML Web Controlul serverului se numește Xml1:

Private Sub Page_Load(ByVal sender As System.Object, _

ByVal e As System.EventArgs) se ocupă de MyBase.Load

Dim xmlDoc ca System.Xml.XmlDocument = _

Sistem nou.Xml.XmlDocument()

xmlDoc.Load(Server.MapPath("MySource.xml"))

Dim xslTran ca System.Xml.Xsl.XslTransform = _

Sistem nou.Xml.Xsl.XslTransform()

xslTran.Load(Server.MapPath("MyStyle.xsl"))

Xml1.Document = xmlDoc

Xml1.Transform = xslTran

End Sub

· generați pur și simplu codul XML în mod programatic și transmiteți acel cod XML către Web Server Control (prin proprietatea DocumentContent)

· în general, introduceți direct codul XML în eticheta XML Web Server Control:

Frank Miller

Judy Lew

efectuați transformarea și transferați rezultatele transformării în aceasta

Un exemplu care ilustrează toate aceste posibilități este prezentat mai jos:

Document="Obiect XmlDocument de afișat"

DocumentContent="Șir de XML"

DocumentSource="Cale către documentul XML"

Transform="Obiect XslTransform"

TransformSource="Calea către documentul de transformare XSL"

runat = "server ">

Puteți adăuga un control XML Web Server la un formular Web, pur și simplu trăgând acest control din ToolBox sau prin programare:

< asp:Xmlid="xmlCtl"runat = "server " />

XmlCtl.Document.Salva (Server.MapPath("xmlResult.xml "))

Structurarea datelor este un lucru util și va fi utilă în cel mai neașteptat moment. De exemplu, dacă vă structurați viitorul imediat, puteți vedea mărimea salariului. Și poți decide cât de eficient vei lucra în această lună.

Desigur, este science-fiction, dar a fost inventat un limbaj special pentru structurarea programării ( xml). Și pentru a edita datele prezentate în acest format, au fost create editori xml specializati:

Ce este XML

Mulți oameni știu că baza oricărei resurse web este HTML. Folosind limbajul hipertext, puteți defini foarte ușor și convenabil ierarhia tuturor elementelor dintr-o pagină web. Parțial, ne permite să rezolvăm problema styling-ului. Toată această ierarhie este creată ( structurat) folosind etichete încorporate și atributele acestora, al căror set, deși nu este mic, este încă limitat.

Prin urmare, HTML vă permite să rezolvați o singură problemă de structurare pe Internet: aranjarea și crearea elementelor unei pagini web pentru marcarea sa ulterioară ( crearea de design). Dar cum să structurați restul datelor transferate în nenumărate cantități între resursele de pe World Wide Web? Cum să le organizezi selecția, căutarea și filtrarea fără restricții?

Toate aceste „deficiențe” pot fi corectate folosind XML. Înainte de a începe revizuirea editorilor xml, să aruncăm o privire mai atentă la ce este acest limbaj și care este domeniul său de aplicare în spațiul virtual:


Abrevierea XML tradusă din engleză înseamnă „ limbaj de marcare extensibil» ( Limbajul de marcare extensibil). Este standardizat și recomandat pentru utilizare de către W3C. Aceasta înseamnă că utilizarea sa este cea mai optimă și „fără probleme” mod de a crea un document web.

Pe lângă descrierea documentelor, XML afectează și parțial funcționarea programelor speciale de sistem. Preprocesoarele acestui limbaj sunt proiectate pentru a traduce datele din codul mașinii într-o formă ușor de utilizat. Astfel de preprocesoare sunt baza tuturor editorilor de fișiere xml.

Limbajul de marcare extensibil are următoarele aspecte pozitive:

  • Este un instrument ideal pentru descrierea structurii și marcajului oricărui document web;
  • În XML nu există un set limitat de elemente cu care se realizează structurarea. În schimb, utilizatorul însuși stabilește ierarhia și denumirile tuturor elementelor, bazându-se doar pe regulile descrierii limbajului;
  • XML are o sintaxă simplă, de înțeles și, cel mai important, extensibilă;
  • Limbajul este construit pe codurile de bază Unicode;
  • Este utilizat pe scară largă nu numai pentru a descrie pagini web obișnuite, ci și se conectează cu ușurință la codul majorității limbajelor de programare. Inclusiv cele utilizate în programarea web ( PHP, ASP. NET si altii ).

Sintaxa XML

Fiecare document scris în XML este format din entități. O entitate este cea mai mică unitate (element). Fiecare dintre entități conține simboluri.

Ele sunt împărțite în:

  • Simboluri de marcare - etichete, comentarii (< тег>, );
  • Caractere literale - acestea sunt conținutul principal cuprins între etichete.

Structura logică a limbajului constă din elemente imbricate ierarhic. Cel mai de sus se numește rădăcină. Fiecare element include o etichetă de deschidere și de închidere. Și ar trebui să se închidă în elementul rădăcină în care a fost deschis:

Salut Lume!

Pe lângă elementul rădăcină, documentul XML constă într-un prolog. Este situat chiar la începutul codului. Prologul poate include:

  • Reclame;
  • Instructiuni de prelucrare;
  • Comentarii.

Componentele principale ale XML sunt prezentate mai clar în următoarea captură de ecran a unui document creat într-un editor xml simplu:


Puteți afla mai multe despre sintaxa limbajului folosind documentația tehnică pentru XML.

Prezentare generală a editorilor pentru XML

  • Microsoft Visual Studio este un mediu de dezvoltare puternic care combină un număr mare de instrumente și instrumente pentru scrierea codului programului. Include, de asemenea, un editor XML sofisticat. Printre altele, susține crearea și vizualizarea schemelor XML. Din păcate, suportul PHP în Visual Studio este slab. Acest mediu este mai „personalizat” pentru crearea de aplicații web folosind ASP.NET:


  • Adobe Dreamweaver este un alt mediu de dezvoltare puternic. Întregul său set de instrumente este complet destinat creării de site-uri web. Sintaxa mai multor limbaje de programare este acceptată. Dreamweaver include, de asemenea, un editor de tabel XML încorporat:


  • XMLSpy XML Editor este un instrument puternic pentru lucrul cu diferite formate de date XML. Nu este acceptată doar editarea simplă a datelor, diagramele, evidențierea sintaxei, ci și vizualizarea grafică a relațiilor ierarhice dintre elemente:


Editorul vizual xml este disponibil în două ediții care costă 399 și 799 de euro. Cea mai scumpă opțiune include suport pentru sintaxă pentru mai multe limbaje de programare și un depanator. Opțiunea mai ieftină este pe deplin compatibilă cu cele mai populare medii de dezvoltare ( Visual Studio, Eclipse), și pot acționa ca supliment cu drepturi depline:


  • XML Notepad este un editor xml gratuit. Are evidențiere de sintaxă încorporată și un instrument de validare. Precum și suport pentru construirea de circuite. Aplicația are o interfață simplă și intuitivă:


Revizuirea serviciilor online

  • XML Schema Generator - un serviciu care vă permite să creați o schemă (XSD) dintr-un document XML obișnuit. Interfața de service este simplă și proiectată în alb-negru. În plus, suntem mulțumiți de absența completă a reclamei;
  • xmlvalidation.com – această resursă vă permite să validați complet conținutul unui document XML copiat într-un câmp special sau încărcat ca fișier:


  • Transformare XSL – servește la transformarea codului XML obișnuit folosind șabloane de stil XSLT specificate. Serviciul include, de asemenea, câteva zeci de instrumente utile pentru webmasteri, inclusiv un validator XML online.

După cum puteți vedea din recenzie, pentru a lucra cu un limbaj de marcare extensibil, cel mai bine este să utilizați un editor xml obișnuit instalat pe propriul computer sau laptop. Setul de instrumente ale serviciilor online specializate nu este atât de larg și vă permite doar să verificați validitatea codului documentului XML. Sau convertiți-i conținutul într-o schemă.