Modalități de procesare xml în c. Cum se deschide un document XML - caracteristici de lucru cu fișiere XML. Crearea unui element XML cu elemente copil




Limbajul de marcare extensibil (XML). Sunt de fapt doar fișiere text care folosesc etichete personalizate pentru a descrie structura și alte caracteristici ale documentului.

Ce este XML

XML este un limbaj de marcare creat de World Wide Web Consortium (W3C) pentru a defini o sintaxă de codificare pentru documente care pot fi citite de oameni și mașini. Face acest lucru cu etichete, care definesc structura documentului, precum și modul în care documentul urmează să fie stocat și transportat.

Cel mai simplu mod de a-l compara este cu un alt limbaj de marcare cu care s-ar putea să fii familiarizat, the marcare hipertext(HTML) folosit pentru a codifica pagini web. HTML folosește un set predefinit de caractere de marcare (coduri scurte) care descriu formatul conținutului dintr-o pagină web.

Cu toate acestea, diferența dintre XML este că este extensibil. XML nu are un limbaj de marcare predefinit ca HTML. În schimb, XML permite utilizatorilor să-și creeze propriile caractere de marcare pentru a descrie conținutul, formând un set de caractere nerestricționat și autodefinibil.

În esență, HTML este un limbaj care se concentrează pe prezentarea conținutului, în timp ce XML este un limbaj dedicat descrierii datelor, folosit pentru stocarea datelor.

XML este adesea folosit ca bază pentru alte formate de documente, dintre care există sute. Iată câteva pe care poate doriți să le știți:

  • RSS și ATOM descriu modul în care aplicațiile ar trebui să gestioneze fluxurile.
  • Microsoft .NET folosește XML pentru fișierele de configurare.
  • Microsoft Office folosește XML ca bază pentru structura documentului.

Deci, dacă aveți un fișier XML, acesta nu vă spune neapărat pentru ce aplicație este. Cu toate acestea, nu trebuie să vă faceți griji cu privire la acest lucru decât dacă dezvoltați fișiere XML.

Cum se deschide un fișier XML

Există mai multe moduri de a deschide direct un fișier XML. Le puteți deschide și edita cu orice editor de text, le puteți vizualiza cu orice browser web sau puteți utiliza un site web care vă permite să le vizualizați, să editați și chiar să le convertiți în alte formate.

Utilizați un editor de text atunci când lucrați cu XML în mod regulat

Deoarece fișierele XML sunt doar fișiere text simplu, ele pot fi deschise cu orice editor de text. Cu toate acestea, multe editoare de text, cum ar fi Notepad, pur și simplu nu sunt concepute pentru a afișa fișiere XML în structura lor corectă. Acest lucru poate fi util pentru a vă familiariza rapid cu conținutul unui fișier XML. Dar, există instrumente mai convenabile pentru a lucra cu ei.


Utilizarea unui browser web pentru a vizualiza un fișier XML

Dacă nu trebuie să editați fișierul XML, ci trebuie doar să vizualizați conținutul, browserul dvs. poate gestiona sarcina. În plus, browserul dvs. web este cel mai probabil deja configurat ca vizualizator XML standard. Deci, dublu clic pe un fișier XML ar trebui să îl deschidă într-un browser.

Dacă nu, puteți face clic dreapta pe fișier pentru a găsi opțiuni pentru a-l deschide cu orice altă aplicație. Doar selectați browserul dvs. web din lista de programe.

Când fișierul se deschide, ar trebui să vedeți date bine structurate. Nu este la fel de frumos ca aspectul de culoare pe care îl obțineți în Notepad++, dar mult mai bun decât notepad.

Utilizarea editorului online pentru fișiere XML

Dacă doriți să editați un fișier XML aleatoriu și nu doriți să descărcați un nou editor de text sau este necesar converti fișierul xml într-un alt format, există mai multe editoare XML online decente disponibile gratuit.

TutorialsPoint.com , XMLGrid.net și CodeBeautify.org - vă permit să vizualizați și să editați fișiere XML. Odată ce editarea este completă, puteți încărca fișierul XML modificat sau chiar îl puteți converti într-un alt format.

Să folosim CodeBeautify.org ca exemplu. Pagina este împărțită în trei secțiuni. În stânga este fișierul XML cu care lucrați. În mijloc vei găsi mai multe funcții. În dreapta, veți vedea rezultatele unora dintre opțiunile dintre care puteți alege.

De exemplu, în imaginea de mai jos, fișierul nostru XML complet este în stânga, iar panoul de rezultate arată o vizualizare arborescentă, deoarece am făcut clic pe butonul Vizualizare arborescentă din mijloc.

Utilizați butonul Răsfoire pentru a încărca un fișier XML de pe computer sau butonul Încărcare URL pentru a prelua fișierul XML dintr-o sursă de internet

Butonul Tree View afișează datele într-o structură arborescentă bine formatată în panoul de rezultate, cu toate etichetele evidențiate în portocaliu și atributele în partea dreaptă a etichetelor.

Beatify vă afișează datele într-un mod ordonat, ușor de citit.

Butonul Minimizare afișează datele dvs. folosind cel mai mic număr de spații. Această funcție va plasa fiecare bucată de date pe o singură linie. Acest lucru va fi util atunci când încercați să micșorați fișierul, ceea ce va economisi spațiu.

În cele din urmă, puteți utiliza butonul XML în JSON pentru a converti formatul XML în JSON și butonul Export în CSV pentru a salva datele ca fișier cu valori separate prin virgulă sau butonul Descărcare pentru a descărca orice modificări pe care le-ați făcut la fișier XML nou...

Probabil ați auzit de XML și există multe motive pentru care ar trebui să îl utilizați în organizația dvs. Dar ce este mai exact XML? Acest articol explică ce este XML și cum funcționează.

În acest articol

Markupuri, marcare și etichete

Pentru a înțelege XML, este util să vă amintiți cum puteți eticheta datele. Documentele au fost create de oameni de multe secole și în tot acest timp oamenii au făcut notițe în ele. De exemplu, profesorii marchează adesea munca elevilor pentru a indica necesitatea de a muta paragrafe, de a face o propoziție mai clară, de a corecta greșelile de ortografie și așa mai departe.Marcarea unui document poate determina structura, sensul și aspectul informațiilor. Dacă ați folosit vreodată corecții în Microsoft Office Word, atunci sunteți familiarizat cu formularul de adnotare computerizat.

În lumea tehnologiei informației, termenul „etichetare” a devenit termenul „markup”. Markup folosește coduri numite etichete (sau uneori jetoane) pentru a defini structura, aspectul vizual și - în cazul XML - semnificația datelor.

Textul HTML al acestui articol este un bun exemplu de utilizare a marcajului computerizat. Dacă faceți clic dreapta pe această pagină în Microsoft Internet Explorer și selectați Vedeți codul HTML, veți vedea text care poate fi citit și etichete HTML, cum ar fi

ȘI

. În documentele HTML și XML, etichetele sunt ușor de recunoscut deoarece sunt incluse între paranteze unghiulare. În codul sursă pentru acest articol, etichetele HTML îndeplinesc multe funcții, cum ar fi definirea începutului și a sfârșitului fiecărui paragraf (

...

) și locația desenelor.

Caracteristici distinctive ale XML

Documentele în format HTML și XML conțin date incluse în etichete, dar aici se termină asemănările dintre cele două limbi. În format HTML, etichetele definesc prezentarea datelor - locația titlurilor, începutul unui paragraf etc. În format XML, etichetele definesc structura și semnificația datelor - ce sunt acestea.

Când descriem structura și semnificația datelor, devine posibilă reutilizarea lor în mai multe moduri. De exemplu, dacă aveți un bloc de date de vânzări în care fiecare element este clar definit, puteți încărca doar elementele necesare în raportul de vânzări și transferați celelalte date în baza de date contabilă. Cu alte cuvinte, puteți utiliza un sistem pentru a genera date și a le eticheta în format XML, apoi procesați aceste date în orice alt sistem, indiferent de platforma client sau de sistemul de operare. Această interoperabilitate face din XML coloana vertebrală a uneia dintre cele mai populare tehnologii de schimb de date.

Țineți cont de următoarele când lucrați:

    HTML nu poate fi folosit în locul XML. Cu toate acestea, datele XML pot fi împachetate în etichete HTML și afișate pe pagini web.

    Caracteristicile HTML sunt limitate la un set predefinit de etichete comune tuturor utilizatorilor.

    Regulile XML vă permit să creați orice etichete necesare pentru a descrie datele și structura acestora. Să presupunem că trebuie să stocați și să partajați informații despre animalele de companie. Pentru a face acest lucru, puteți crea următorul cod XML:

    Izzy siamez 6 da Nu Izz138bod Colin Wilcox

După cum puteți vedea, etichetele XML arată clar ce date vizualizați. De exemplu, este clar că acestea sunt date despre o pisică și îi puteți determina cu ușurință numele, vârsta și așa mai departe. Având posibilitatea de a crea etichete care definesc aproape orice structură de date, XML este extensibil.

Dar nu confundați etichetele din acest exemplu cu etichetele din fișierul HTML. De exemplu, dacă textul XML de mai sus este lipit într-un fișier HTML și deschis într-un browser, rezultatele vor arăta astfel:

Izzy Siamese 6 da nu Izz138bod Colin Wilcox

Browserul web va ignora etichetele XML și va afișa numai datele.

Date bine formate

Probabil ați auzit pe cineva din IT vorbind despre un fișier XML „bine format”. Un fișier XML bine format trebuie să respecte reguli foarte stricte. Dacă nu respectă aceste reguli, XML-ul nu funcționează. De exemplu, în exemplul anterior, fiecare etichetă de început are o etichetă de final corespunzătoare, astfel încât acest exemplu urmează una dintre regulile pentru un fișier XML bine format. Dacă eliminați orice etichetă din fișier și încercați să o deschideți într-unul dintre programele Office, veți primi un mesaj de eroare și nu veți putea folosi un astfel de fișier.

Nu trebuie să cunoașteți regulile pentru crearea unui fișier XML bine format (deși sunt ușor de înțeles), dar rețineți că numai datele XML bine formate pot fi folosite în alte aplicații și sisteme. Dacă fișierul XML nu se deschide, atunci este probabil malformat.

XML este independent de platformă, ceea ce înseamnă că orice program creat pentru a utiliza XML poate citi și procesa date XML, indiferent de hardware sau sistem de operare. De exemplu, cu etichetele XML potrivite, puteți utiliza un program desktop pentru a deschide și a procesa datele primite de la mainframe. Și, indiferent de cine a creat datele XML, este posibil să lucrați cu datele în diferite aplicații Office. Datorită interoperabilității sale, XML a devenit una dintre cele mai populare tehnologii pentru schimbul de date între bazele de date și computerele utilizatorilor.

Pe lângă datele etichetate bine formate, sistemele XML utilizează de obicei două componente suplimentare: scheme și transformări. Următoarele secțiuni descriu modul în care funcționează.

Sistem

Nu vă lăsați intimidați de termenul „schemă”. O schemă este pur și simplu un fișier XML care conține reguli pentru conținutul unui fișier de date XML. Fișierele de schemă au de obicei extensia .xsd, în timp ce fișierele de date XML folosesc extensia .xml.

Schemele permit programelor să valideze datele. Ele formează structura datelor și le fac ușor de înțeles creatorului și altor persoane. De exemplu, dacă utilizatorul introduce date nevalide, cum ar fi text într-un câmp de dată, programul ar putea solicita utilizatorului să le corecteze. Dacă datele din fișierul XML se potrivesc cu regulile din schemă, puteți utiliza orice program care acceptă XML pentru a le citi, interpreta și procesa. De exemplu, așa cum se arată în figura de mai jos, Excel poate valida datele pentru conformitatea cu schema CAT.

Schemele pot fi complexe și este imposibil să explicați cum să le creați în acest articol. (De asemenea, este probabil ca organizația dvs. să aibă personal IT care știe cum să facă acest lucru.) Cu toate acestea, este util să știți cum arată diagramele. Următoarea schemă definește regulile pentru un set de etichete ... :

Nu vă faceți griji dacă exemplul nu are sens. Doar fiți atenți la următoarele:

    Elementele inline din schema exemplu se numesc declarații. Dacă ar fi necesare detalii suplimentare despre animal, cum ar fi culoarea sau caracteristicile speciale ale acestuia, departamentul IT ar adăuga declarații corespunzătoare la schemă. Sistemul XML se poate schimba pe măsură ce nevoile afacerii evoluează.

    Declarațiile sunt o modalitate puternică de a controla structura datelor. De exemplu, ad înseamnă etichete ca Și , trebuie să fie în ordinea de mai sus. Declarațiile pot verifica, de asemenea, tipurile de intrare de utilizator. De exemplu, schema de mai sus necesită un număr întreg pozitiv pentru vârsta pisicii și boolean (TRUE sau FALSE) pentru etichetele ALTERED și DECLAWED.

    Dacă datele din fișierul XML sunt conforme cu regulile schemei, atunci se spune că datele sunt valide. Procesul de verificare a conformității unui fișier de date XML cu regulile schemei se numește (în mod destul de logic) validare. Un mare avantaj al utilizării schemelor este că pot preveni coruperea datelor. Schemele facilitează, de asemenea, găsirea datelor corupte, deoarece atunci când apare o astfel de problemă, procesarea fișierului XML este oprită.

Transformări

După cum sa discutat mai sus, XML permite, de asemenea, utilizarea eficientă și reutilizarea datelor. Mecanismul de reutilizare a datelor se numește transformare XSLT (sau pur și simplu transformare).

Dumneavoastră (sau departamentul dvs. IT) puteți utiliza, de asemenea, transformări pentru a face schimb de date între sistemele back-end, cum ar fi între baze de date. Să presupunem că baza de date A are date despre vânzări într-un tabel care este util departamentului de vânzări. Baza de date B stochează datele privind veniturile și cheltuielile într-un tabel special conceput pentru contabilitate. Baza de date B poate folosi o transformare pentru a prelua date din baza de date A și a le pune în tabelele corespunzătoare.

Combinația dintre un fișier de date, o schemă și o transformare formează sistemul XML de bază. Figura următoare arată funcționarea unor astfel de sisteme. Fișierul de date este verificat în raport cu regulile schemei și apoi trimis în orice mod adecvat pentru transformare. În acest caz, transformarea plasează datele într-un tabel pe pagina web.

Următorul exemplu arată o transformare care încarcă date la un tabel de pe o pagină web. Scopul exemplului nu este de a explica cum se creează transformări, ci de a arăta una dintre formele pe care acestea le pot lua.

Nume Rasă Vârstă alterat Delegat Licență Proprietar

Acest exemplu arată cum ar putea arăta textul unuia dintre tipurile de transformare, dar rețineți că vă puteți limita la o descriere clară a ceea ce aveți nevoie din date, iar această descriere poate fi făcută în propria dvs. limbă. De exemplu, puteți merge la departamentul IT și spuneți că trebuie să tipăriți date de vânzări pentru anumite regiuni din ultimii doi ani și că aceste informații ar trebui să arate așa și asta. După aceea, specialiștii departamentului pot scrie (sau modifica) transformarea pentru a vă îndeplini solicitarea.

Microsoft și un număr tot mai mare de alte companii creează transformări pentru o varietate de sarcini care fac utilizarea XML și mai convenabilă. În viitor, cel mai probabil va fi posibil să descărcați o conversie care se potrivește nevoilor dvs. cu personalizare redusă sau deloc. Aceasta înseamnă că, în timp, utilizarea XML va deveni din ce în ce mai puțin costisitoare.

XML în sistemul Microsoft Office

Edițiile profesionale ale Office oferă suport îmbunătățit pentru XML. Începând cu Microsoft Office System 2007, Microsoft Office utilizează formate de fișiere bazate pe XML, cum ar fi DOCX, XLSX și PPTX. Deoarece XML stochează datele într-un format text, mai degrabă decât într-un format binar, clienții își pot defini propriile scheme și pot folosi datele în mai multe moduri fără a fi nevoiți să plătească redevențe. Pentru mai multe informații despre noile formate, consultați Open XML Formats și Filename Extensions. Mai jos sunt alte beneficii.

Toate acestea sunt grozave, dar ce se întâmplă dacă aveți date XML fără o schemă? Depinde de programul Office pe care îl utilizați. De exemplu, când deschideți un fișier XML fără o schemă în Excel, se presupune că schema există și vă permite să încărcați datele într-un tabel XML. Puteți utiliza liste și tabele XML pentru a sorta, filtra și calcula datele.

Activați instrumentele XML în Office

În mod implicit, fila Dezvoltator nu este afișată. Trebuie adăugat în panglică pentru a utiliza comenzile XML în Office.

În articolul precedent au fost descrise concepte generale legate de XML. În acest articol, vom învăța cum să efectuăm acțiuni de bază legate de modificarea, adăugarea, căutarea într-un fișier XML.

Fișier XML care este folosit pentru exemplu.

Mazda 2007 BMW 2009

xml dom

În acest moment, fișierul nostru conține următoarea structură:

Relația dintre nodurile în XML DOM, momente de bază:

1. Orice nod din arborele DOM are un ParentNode părinte. În exemplul nostru, garajul este părintele ambelor elemente ale mașinii, iar ambele elemente ale mașinii sunt la rândul lor părinți ai elementelor model și an.

Cum să obțineți părintele elementului xml auto?

Console.WriteLine(elmRoot["masina"].ParentNode.Name); //Rezultat: garaj

2. Un părinte poate avea copii ChildNodes. De exemplu, pentru un nod de garaj, ambele elemente ale mașinii sunt copii. Elementele mașinii au și copii model și an.

ChildNodes, este o colecție care stochează toate elementele xml copil, pentru a accesa elementul dorit, trebuie să specificați indexul acestuia. (Indexul începe întotdeauna de la zero!)

De exemplu: cum să obțineți primul element copil?

ElmRoot.ChildNodes;

3. Ca în viața obișnuită, un copil se poate naște primul FirstChild sau ultimul LastChild.

Dacă luăm ca exemplu elementul mașină, atunci

FirstChild este modelul LastChild este anul

4. La rândul lor, există și legături între elementele copil, ele pot fi frați sau surori, dacă facem paralele cu viața reală.

Un copil poate avea, de exemplu, un frate Previous Sibling și un următor frate Next Sibling

Console.WriteLine(elmRoot.ChildNodes.FirstChild.NextSibling.Name); //Rezultat: anul Console.WriteLine(elmRoot.ChildNodes. LastChild.PreviousSibling.Name); //Rezultat: model

Dacă elementul nu este găsit, atunci se aruncă o excepție: NullReferenceException, deci atunci când lucrați cu xml, folosiți întotdeauna blocurile try catch.

Console.WriteLine(elmRoot.ChildNodes.LastChild.NextSibling.Name); Console.WriteLine(elmRoot.ChildNodes.FirstChild.PreviousSibling.Name);

LastChild este NextSibling;
FirstChild este PreviousSibling;

Folosind metodele descrise mai sus, puteți naviga cu ușurință la nodul dorit și puteți obține orice valoare de care aveți nevoie.

Cum să obțineți valoarea unui element xml?

Valoarea elementului xml poate fi obținută folosind proprietatea InnerText, de exemplu:

Console.WriteLine(elmRoot["masina"].FirstChild.InnerText); //Rezultat: mazda

O altă modalitate de a obține aceeași valoare a unui element xml:

Console.WriteLine(elmRoot.FirstChild.FirstChild.InnerText); //Rezultat: mazda

Secvența deplasării prin arborele DOM:

Garaj -> masina -> model -> Mazda

Obțineți anul:

ElmRoot[„mașină”].LastChild.InnerText; //Rezultat: 2007

Urmare:

Garaj -> masina -> an -> 2007

Un alt exemplu: 3 moduri de a obține același rezultat.

Console.WriteLine(elmRoot.LastChild.FirstChild.InnerText); Console.WriteLine(elmRoot["mașină"].NextSibling.FirstChild.InnerText); Console.WriteLine(elmRoot.ChildNodes.Item(1).FirstChild.InnerText); //Rezultat: BMW

Dacă doriți să obțineți anul pentru un element cu o valoare Mazda:

Console.WriteLine(elmRoot.FirstChild.LastChild.InnerText); //Rezultat: 2007

Pentru BMW (două moduri, obțineți același rezultat)

Console.WriteLine(elmRoot.ChildNodes.Item(1).ChildNodes.Item(1).InnerText); Console.WriteLine(elmRoot.ChildNodes.ChildNodes.InnerText); //Rezultat: 2009

Cum se schimbă valorile unui element xml?

Folosind proprietatea InnerText() puteți să obțineți și să modificați valoarea elementului xml, de exemplu, să schimbați anul.

//Setați o nouă valoare elmRoot.FirstChild.LastChild.InnerText = "2010"; //Trimite noua valoare pe ecranul consolei Console.WriteLine(elmRoot.FirstChild.ChildNodes.Item(1).InnerText); //Rezultat: 2010

În același timp, trebuie să vă amintiți că toate modificările apar cu un fișier xml virtual, dacă deschideți un fișier fizic, veți vedea că anul 2007 este încă indicat în el.

Pentru ca modificările să intre în vigoare, trebuie să utilizați metoda Salvare, de exemplu:

ElmRoot.Save ("nume fișier xml sau flux");

Acum informațiile vor fi modificate în fișierul xml „fizic”.

Cum să obțineți numărul de elemente copil?

Console.WriteLine(elmRoot.FirstChild.ChildNodes.Count);

garaj -> masina contine 2 copii: model si an

Console.WriteLine(elmRoot.FirstChild.FirstChild.ChildNodes.Count);

garaj -> mașină -> model conține 1 element copil xml.

Accesarea elementelor copil

prin index

ElmRoot.ChildNodes.Name; elmRoot.ChildNodes.Name; //Rezultat: masina

Cu o buclă

Foreach (XmlNode nod în elmRoot.ChildNodes) ( Console.WriteLine(nod.Name); ) //Rezultat: mașină, mașină

Cum să obțineți numele unui element xml?

elmRoot.Nume; //Rezultat: garaj

Crearea unui nou element XML

Să creăm un nou element în documentul nostru XML pentru a-l deosebi de celelalte două (mașină), să-l numim un autobuz.

Când creăm un element nou, vom folosi recomandarea de pe site-ul msdn și vom folosi metoda CreateElement în locul noului XmlElement standard.

XmlElement elm = xmlDoc.CreateElement("bus");

Crearea și adăugarea unui nou element xml

Să creăm un nou element xml numit „BUS”.

XmlElement elmRoot = xmlDoc.DocumentElement; Console.WriteLine(elmRoot.ChildNodes.Count); //mașină, mașină XmlElement elmNew = xmlDoc.CreateElement("bus"); elmRoot.AppendChild(elmNew); Console.WriteLine(elmRoot.ChildNodes.Count); //3 mașină, mașină, autobuz xmlDoc.Save("nume fișier xml");

Explicaţie:

1. În primul rând, obținem elementul rădăcină la care vom atașa elemente noi.

2. Ca test, tipăriți numărul curent de copii ai elementului garaj: 2 (mașină și mașină)

3. Creați un nou element BUS

4. Utilizarea metodei AppendChild adăugați un nou element în arbore

5. Să folosim din nou verificarea și să afișăm numărul curent de elemente pentru elementul de garaj, acum sunt 3: mașină, mașină, autobuz.

6. Pentru ca modificările să afecteze fișierul fizic, salvăm

În fișierul XML în sine, noul element va arăta astfel:

Cum se adaugă un nou element xml?

Sarcină: creați un nou element XML și adăugați-i conținut text, cum ar fi anul emiterii.

String strFilename = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = nou XmlDocument(); xmlDoc.Load(strFilename); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmNew = xmlDoc.CreateElement("bus"); XmlText new_txt = xmlDoc.CreateTextNode("2006"); elmRoot.AppendChild(elmNew); elmRoot.LastChild.AppendChild(new_txt); Console.WriteLine(elmRoot.ChildNodes.Name); //bus Console.WriteLine(elmRoot.ChildNodes.LastChild.InnerText); //2006 Console.Read();

În fișierul XML:

2006

Pentru claritate

Și acum să creăm un nod „autobuz”, cu aceeași arhitectură ca și mașina, adică să adăugăm nodurile: model, an și ceva conținut text.

Crearea unui element XML cu elemente copil

string strFilename = @"C:\lectii\Auto.xml"; //creează un nou document xml în memorie XmlDocument xmlDoc = new XmlDocument(); //încărcați fișierul xml în memorie xmlDoc.Load(strFilename); //Obține elementul rădăcină XmlElement elmRoot = xmlDoc.DocumentElement; //Creează 3 elemente: bus, model, year XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("an"); //Setați valori pentru elemente: model, year XmlText year_txt = xmlDoc.CreateTextNode("2006"); //XmlText mod_txt = xmlDoc.CreateTextNode("liaz"); adăugați altfel //Adăugați două elemente copil la elementul magistrală: model și anul elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); //Adăugați valori la nodurile model și an elmModel.InnerText = "liaz"; elmYear.AppendChild(year_txt); //Adăugați o nouă magistrală de elemente xml în arborele elmRoot.AppendChild(elmBUS); //Verifică dacă totul este adăugat corect Console.WriteLine(elmRoot.ChildNodes.FirstChild.InnerText); Console.WriteLine(elmRoot.LastChild.LastChild.InnerText); //Dacă totul este în ordine, atunci folosiți metoda Salvare xmlDoc.Save("nume fișier xml");

Rezultat:

liaz 2006

Cum poți scurta acest cod? De exemplu, după cum urmează:

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = nou XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("an"); //Adăugați valori la nodurile model și an elmModel.InnerText = "liaz"; elmYear.InnerText = "2006"; elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); elmRoot.AppendChild(elmBUS); //Dacă totul este corect, atunci apelați metoda Salvare xmlDoc.Save("nume fișier xml");

Să scurtăm codul puțin mai mult, pentru aceasta vom folosi proprietatea InnerXml:

XmlDocument xmlDoc = nou XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmXML = xmlDoc.CreateElement("bus"); șir txt=" liaz" + "2006"; //InnerXml! elmXML.InnerXml = txt; //xmlDoc.DocumentElement (va fi garaj) este o altă modalitate de a accesa elementul rădăcină, la fel ca XmlElement elmRoot = xmlDoc.DocumentElement; xmlDoc.DocumentElement.AppendChild( elmXML);xmlDoc .Salvare(PathXmlFile);

Rezultat

Obțineți o listă de elemente cu GetElementByTagName

GetElementByTagName revine XmlNodeList, care conține toate elementele descendente aparținând elementului specificat, de exemplu, trebuie să obținem toate modelele de mașini care sunt stocate în garaj:

XmlDocument xmlDoc = nou XmlDocument(); xmlDoc.Load(strFilename); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); foreach (nodul XmlNode în modelName) ( Console.WriteLine(node.InnerText); ) //Rezultat: mazda, bmw, liaz

Referire cu un index:

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = nou XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); Console.WriteLine(modelName.InnerText); //Rezultat: liaz

Cum pot schimba conținutul text al elementului „autobuz” nou creat folosind metoda GetElementByTagName?

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = nou XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); Console.WriteLine(modelName.InnerText); //Obține valoare: liaz

Sau poți schimba numele liaz în Ikarus

Console.WriteLine(modelName.InnerText = "Ikarus");

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


De ce trebuie să lucrăm cu XML?

Dacă încă nu aveți 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. 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 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, lucrurile stau puțin diferit cu XML ș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ă, vă permite totuși perfect să stocați și să transmiteți orice date. Deoarece acest format este textual, problema naturii sale multiplatforme se rezolvă de la sine, iar problema transmiterii datelor XML este la fel de ușor de rezolvat (ca, de exemplu, se face în SOAP). În plus, puteți schimba cu ușurință formatul de transmisie sau de stocare prin adăugarea de noi atribute și să nu vă faceți prea multe griji cu privire la compatibilitatea cu versiunile anterioare ale formatului, deoarece aplicațiile care utilizează versiunea veche vor putea citi ceea ce au nevoie fără să acorde atenție noilor etichete. sau atribute.. Multe aplicații folosesc formate de fișiere bazate pe XML, multe protocoale de comunicare sunt, de asemenea, bazate pe XML, iar lista celor două 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. Cu toate acestea, depinde deja în mare măsură de etichetele pe care le alegeți. Poti sa scrii Sf. Melnikaite, 2, Pot sa . Deși, să fiu sincer, mi se pare că cu hard disk-urile actuale și canalele groase, nu are rost să mă micșorăm în mod special.

Deci, în mâini capabile, XML este un lucru puternic și convenabil și, din cauza omniprezenței acestui format, nu puteți ajunge nicăieri de la el. Deci, să trecem la scrierea codului programului.

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


Î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 de îndată ce ne angajăm în programare, atunci nu este potrivit să creăm date XML cu „mânere”. Prin urmare, să ne ocupăm mai întâi de scrierea datelor în XML.

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

O clasă specială XmlTextWriter este responsabilă pentru scrierea datelor XML în .NET Framework, care vă permite să scrieți date XML într-un flux arbitrar. Adică, în general, le putem scrie cu ea într-un fișier și într-o bază de date, și trimiteți cuiva prin Internet, dar deocamdată vom scrie totul într-un fișier. Puteți redirecționa ieșirea schimbând constructorul obiectului (adică, nu transmiteți numele fișierului și codificarea acestuia în timpul inițializării, ci un obiect care este un flux de date Cred că sunt puțin înaintea mea, așa că haideți mai întâi să aruncăm o privire la 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 doar o înregistrare a numelui fișierului în care vom salva datele. Apoi, 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. Rețineți că atunci când construim obiectul, specificăm și codificarea î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 pe o singură linie, ceea ce, deși economisește spațiu, îl face practic nepotrivit pentru editare manuală.

Scrierea documentului începe cu un apel la metoda WriteStartDocument () a obiectului nostru xml. Linia care o urmează adaugă elementul rădăcină „rootelement” în documentul nostru XML (reamintim, pentru documentele XML, elementul rădăcină trebuie să fie prezent într-o singură instanță). Apoi, într-o buclă, 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 prin 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 una de consolă), astfel încât să puteți monitoriza rezultatul citirii fișierului XML. Ei bine, dacă programul dvs. este consolă, atunci puteți redirecționa cu ușurință ieșirea către consolă.

Ca de obicei, ne vom familiariza mai întâi cu codul programului și apoi vom vedea 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ță XmlTextReader numită xml (aici presupunem că variabila FileName a fost deja definită de noi mai devreme). Pentru a sări peste liniile goale, dacă acestea apar într-un mod de neînțeles în fișierul XML nou creat, folosim următoarea linie din fragmentul de cod de mai sus. Variabila i este utilizată 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 „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 citirea subelementelor „subsubelement” (rețineți că nu avem nevoie de un XmlTextReader separat pentru aceasta) și atributele acestor subelemente.Ca și înainte, introducem toate informațiile citite în listBox1 pentru a controla lectura corectă.

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


În spatele scenelor

În general, exemplul pe care tocmai l-am analizat este prea simplu pentru proiecte reale. În zilele noastre, atunci când citiți documente XML, acestea sunt de obicei validate folosind DTD, XML Schema sau Relax NG. Validarea este o verificare a conformității marcajului unui document XML cu un standard descris într-un fișier extern. Este necesară validarea, astfel încât verificarea documentelor să nu fie conectată în algoritmul programului, dar să se poată schimba în mod arbitrar la modificarea formatului de date fără a actualiza codul programului care citește sau scrie datele. Din păcate, acum nu vom avea timp să analizăm validarea, deoarece, după cum înțelegeți, 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 anumit șablon de pagină web la un fișier XML cu unele date. Deoarece cea mai mare parte a utilizării actuale a datelor XML într-un fel sau altul cade pe World Wide Web, ar fi foarte, foarte bine să luăm în considerare transformările XSL.

Așadar, cred că acest articol va avea o continuare - dar, bineînțeles, doar dacă tu însuți (adică cititorii Computer News) întrebi despre asta pe forum sau într-o scrisoare către adresa mea de e-mail. Deocamdată, despre utilizarea XML în aplicațiile .NET, poate asta este. Sper că aceste informații vă vor fi utile.