Načini obrade xml-a u c. Kako otvoriti XML dokument - karakteristike rada sa XML datotekama. Kreiranje XML elementa sa podređenim elementima




Extensible Markup Language (XML). Oni su zapravo samo tekstualne datoteke koje koriste prilagođene oznake za opis strukture i drugih karakteristika dokumenta.

Šta je XML?

XML je jezik za označavanje koji je kreirao World Wide Web Consortium (W3C) za definiranje sintakse kodiranja za dokumente koje mogu čitati ljudi i mašine. To radi pomoću oznaka, koje definiraju strukturu dokumenta kao i način na koji dokument treba biti pohranjen i transportovan.

Najlakši način da ga uporedite je sa drugim markup jezikom koji vam je možda poznat, a to je hipertekst markup(HTML) koji se koristi za kodiranje web stranica. HTML koristi unaprijed definirani skup znakova za označavanje (kratkih kodova) koji opisuju format sadržaja na web stranici.

Međutim, razlika između XML-a je u tome što je proširiv. XML nema unapred definisan jezik za označavanje kao HTML. Umjesto toga, XML omogućava korisnicima da kreiraju vlastite znakove za označavanje kako bi opisali sadržaj, formirajući neograničen i samodefinirajući skup znakova.

U suštini, HTML je jezik koji se fokusira na predstavljanje sadržaja, dok je XML namenski jezik za opis podataka koji se koristi za skladištenje podataka.

XML se često koristi kao osnova za druge formate dokumenata, kojih ima na stotine. Evo nekoliko koje biste možda željeli znati:

  • RSS i ATOM opisuju kako aplikacije treba da rukuju feedovima.
  • Microsoft .NET koristi XML za svoje konfiguracijske datoteke.
  • Microsoft Office koristi XML kao osnovu za strukturu dokumenta.

Dakle, ako imate XML datoteku, ona vam ne mora nužno reći za koju aplikaciju je namijenjena. Međutim, ne morate brinuti o tome osim ako ne razvijate XML datoteke.

Kako otvoriti XML fajl

Postoji nekoliko načina da direktno otvorite XML datoteku. Možete ih otvarati i uređivati ​​bilo kojim uređivačem teksta, pregledavati ih bilo kojim web preglednikom ili koristiti web stranicu koja vam omogućava da ih pregledate, uređujete, pa čak i konvertujete u druge formate.

Koristite uređivač teksta kada redovno radite sa XML-om

Budući da su XML datoteke samo obične tekstualne datoteke, mogu se otvoriti bilo kojim uređivačem teksta. Međutim, mnogi uređivači teksta, kao što je Notepad, jednostavno nisu dizajnirani da prikazuju XML datoteke u njihovoj ispravnoj strukturi. Ovo može biti korisno za brzo upoznavanje sa sadržajem XML datoteke. Ali postoje praktičniji alati za rad s njima.


Korišćenje web pretraživača za pregled XML datoteke

Ako ne trebate uređivati ​​XML datoteku, već samo trebate pogledati sadržaj, vaš pretraživač može obaviti zadatak. Štaviše, vaš web pretraživač je najvjerovatnije već postavljen kao standardni XML preglednik. Dakle, dvostruki klik na XML datoteku bi trebalo da je otvori u pretraživaču.

Ako nije, možete kliknuti desnim tasterom miša na datoteku da pronađete opcije za otvaranje bilo kojom drugom aplikacijom. Samo odaberite svoj web pretraživač sa liste programa.

Kada se datoteka otvori, trebali biste vidjeti dobro strukturirane podatke. Nije tako lijep kao izgled boje koji dobijete u Notepad++, ali je mnogo bolji od notepada.

Korištenje online uređivača za XML datoteke

Ako želite da uredite nasumični XML fajl i ne želite da preuzmete novi uređivač teksta, ili morate da pretvoriti xml datoteku u drugi format, postoji nekoliko pristojnih online XML editora dostupnih besplatno.

TutorialsPoint.com , XMLGrid.net i CodeBeautify.org - omogućavaju vam pregled i uređivanje XML datoteka. Kada se uređivanje završi, možete prenijeti izmijenjenu XML datoteku ili je čak pretvoriti u drugi format.

Koristimo CodeBeautify.org kao primjer. Stranica je podijeljena u tri dijela. Na lijevoj strani je XML datoteka s kojom radite. U sredini ćete pronaći nekoliko funkcija. Na desnoj strani ćete vidjeti rezultate nekih od opcija koje možete birati.

Na primjer, na slici ispod, naša puna XML datoteka je na lijevoj strani, a okno rezultata prikazuje prikaz stabla jer smo kliknuli na dugme Prikaz stabla u sredini.

Koristite dugme Pregledaj da učitate XML fajl sa svog računara ili dugme Učitaj URL da preuzmete XML sa internet izvora

Dugme Prikaz stabla prikazuje podatke u dobro formatiranoj strukturi stabla u oknu rezultata, sa svim oznakama istaknutim narandžastom bojom i atributima desno od oznaka.

Beatify prikazuje vaše podatke na uredan, lak za čitanje način.

Dugme Minify prikazuje vaše podatke koristeći najmanje razmaka. Ova funkcija će smjestiti svaki pojedini dio podataka u jednu liniju. Ovo će vam dobro doći kada pokušate da smanjite datoteku, što će uštedjeti malo prostora.

Konačno, možete koristiti dugme XML u JSON da konvertujete XML u JSON format i dugme Izvezi u CSV da sačuvate podatke kao datoteku vrednosti odvojene zarezima ili dugme Preuzmi da preuzmete sve promene koje ste napravili na novi XML fajl..

Vjerovatno ste čuli za XML i postoji mnogo razloga zašto biste ga trebali koristiti u svojoj organizaciji. Ali šta je zapravo XML? Ovaj članak objašnjava šta je XML i kako funkcioniše.

U ovom članku

Oznake, oznake i oznake

Da biste razumjeli XML, korisno je zapamtiti kako možete označiti podatke. Dokumente su ljudi stvarali vekovima i za sve to vreme ljudi su u njima pravili beleške. Na primjer, nastavnici često označavaju rad učenika kako bi ukazali na potrebu pomjeranja pasusa, jasnije rečenice, ispravljali pravopisne greške itd. Označavanjem dokumenta može se odrediti struktura, značenje i izgled informacija. Ako ste ikada koristili ispravke u programu Microsoft Office Word, tada ste upoznati sa kompjuterizovanim formularom za beleške.

U svijetu informacionih tehnologija, termin "tagging" postao je izraz "markup". Označavanje koristi kodove koji se nazivaju oznake (ili ponekad tokeni) za definiranje strukture, vizualnog izgleda i - u slučaju XML-a - značenja podataka.

HTML tekst ovog članka je dobar primjer upotrebe kompjuterskih oznaka. Ako desnom tipkom miša kliknete ovu stranicu u Microsoft Internet Explorer-u i odaberete Pogledajte HTML kod, vidjet ćete čitljiv tekst i HTML oznake poput

I

. U HTML i XML dokumentima, oznake se lako prepoznaju jer su zatvorene u uglastim zagradama. U izvornom kodu za ovaj članak, HTML oznake obavljaju mnoge funkcije, kao što je definiranje početka i kraja svakog pasusa (

...

) i lokaciju crteža.

Posebne karakteristike XML-a

Dokumenti u HTML i XML formatu sadrže podatke zatvorene u tagove, ali tu prestaju sličnosti između ova dva jezika. U HTML formatu, oznake definiraju prezentaciju podataka - lokaciju naslova, početak pasusa, itd. U XML formatu oznake definiraju strukturu i značenje podataka - šta je to.

Kada se opisuje struktura i značenje podataka, postaje moguće ponovno ih koristiti na nekoliko načina. Na primjer, ako imate blok podataka o prodaji gdje je svaki element jasno definiran, možete učitati samo potrebne elemente u izvještaj o prodaji, a ostale podatke prenijeti u računovodstvenu bazu podataka. Drugim riječima, možete koristiti jedan sistem da generišete podatke i označite ih u XML formatu, a zatim obradite ove podatke u bilo kojem drugom sistemu, bez obzira na klijentsku platformu ili operativni sistem. Ova interoperabilnost čini XML okosnicu jedne od najpopularnijih tehnologija za razmjenu podataka.

Imajte na umu sljedeće prilikom rada:

    HTML se ne može koristiti umjesto XML-a. Međutim, XML podaci mogu biti umotani u HTML oznake i prikazani na web stranicama.

    HTML karakteristike su ograničene na unaprijed definirani skup oznaka zajedničkih za sve korisnike.

    XML pravila vam omogućavaju da kreirate sve oznake potrebne za opisivanje podataka i njihove strukture. Recimo da trebate pohraniti i podijeliti informacije o kućnim ljubimcima. Da biste to učinili, možete kreirati sljedeći XML kod:

    Izzy sijamski 6 da br Izz138bod Colin Wilcox

Kao što vidite, XML oznake jasno pokazuju koje podatke gledate. Na primjer, jasno je da se radi o podacima o mački i lako možete odrediti njeno ime, starost itd. Uz mogućnost kreiranja oznaka koje definiraju gotovo svaku strukturu podataka, XML je proširiv.

Ali nemojte brkati oznake u ovom primjeru sa oznakama u HTML datoteci. Na primjer, ako se gornji XML tekst zalijepi u HTML datoteku i otvori u pregledniku, rezultati će izgledati ovako:

Izzy Siamese 6 da ne Izz138bod Colin Wilcox

Web pretraživač će zanemariti XML oznake i prikazati samo podatke.

Dobro formirani podaci

Verovatno ste čuli nekoga iz IT-a da govori o "dobro formiranom" XML datoteci. Dobro oblikovana XML datoteka mora slijediti vrlo stroga pravila. Ako ne slijedi ova pravila, XML ne radi. Na primjer, u prethodnom primjeru, svaka početna oznaka ima odgovarajuću završnu oznaku, tako da ovaj primjer slijedi jedno od pravila za dobro oblikovanu XML datoteku. Ako uklonite bilo koju oznaku iz datoteke i pokušate da je otvorite u nekom od Office programa, dobićete poruku o grešci i nećete moći da koristite takvu datoteku.

Ne morate znati pravila za kreiranje dobro oblikovane XML datoteke (iako ih je lako razumjeti), ali zapamtite da se samo dobro oblikovani XML podaci mogu koristiti u drugim aplikacijama i sistemima. Ako se XML datoteka ne otvori, vjerovatno je pogrešno oblikovana.

XML je nezavisan od platforme, što znači da svaki program napravljen da koristi XML može čitati i obraditi XML podatke bez obzira na hardver ili operativni sistem. Na primjer, s pravim XML oznakama, možete koristiti desktop program za otvaranje i obradu podataka primljenih sa glavnog računala. I, bez obzira na to ko je kreirao XML podatke, moguće je raditi s podacima u raznim Office aplikacijama. Zbog svoje interoperabilnosti, XML je postao jedna od najpopularnijih tehnologija za razmjenu podataka između baza podataka i korisničkih računala.

Pored dobro oblikovanih označenih podataka, XML sistemi obično koriste dvije dodatne komponente: šeme i transformacije. Sljedeći odjeljci opisuju kako funkcioniraju.

Šema

Nemojte se plašiti termina "šema". Šema je jednostavno XML datoteka koja sadrži pravila za sadržaj XML datoteke podataka. Datoteke šeme obično imaju ekstenziju .xsd, dok datoteke XML podataka koriste ekstenziju .xml.

Šeme omogućavaju programima da provjere podatke. Oni formiraju strukturu podataka i čine ih razumljivim kreatoru i drugim ljudima. Na primjer, ako korisnik unese nevažeće podatke, kao što je tekst u polje datuma, program može zatražiti od korisnika da ih ispravi. Ako se podaci u XML datoteci podudaraju s pravilima u šemi, možete koristiti bilo koji program koji podržava XML za čitanje, tumačenje i obradu. Na primjer, kao što je prikazano na donjoj slici, Excel može provjeriti valjanost podataka za usklađenost sa CAT šemom.

Šeme mogu biti složene i nemoguće je objasniti kako ih kreirati u ovom članku. (Takođe je vjerovatno da vaša organizacija ima IT osoblje koje zna kako to da uradi.) Međutim, korisno je znati kako dijagrami izgledaju. Sljedeća šema definira pravila za skup oznaka ... :

Ne brinite ako primjer nema smisla. Samo obratite pažnju na sljedeće:

    Umetnuti elementi u shemi primjera nazivaju se deklaracije. Ako su potrebni dodatni detalji o životinji, kao što su njena boja ili posebne karakteristike, IT odjel bi dodao odgovarajuće deklaracije u shemu. XML sistem se može mijenjati kako se poslovne potrebe razvijaju.

    Deklaracije su moćan način kontrole strukture podataka. Na primjer, oglas znači oznake poput I , mora biti gore navedenim redoslijedom. Deklaracije također mogu provjeriti tipove korisničkog unosa. Na primjer, gornja shema zahtijeva pozitivan cijeli broj za starost mačke i logičke vrijednosti (TRUE ili FALSE) za oznake ALTERED i DECLAWED.

    Ako su podaci u XML datoteci u skladu s pravilima sheme, tada se kaže da su podaci valjani. Proces provjere da li je XML datoteka podataka usklađena s pravilima sheme (dovoljno logično) naziva se validacija. Velika prednost korištenja shema je to što one mogu spriječiti oštećenje podataka. Šeme također olakšavaju pronalaženje oštećenih podataka jer kada se pojavi takav problem, obrada XML datoteke se zaustavlja.

Transformacije

Kao što je gore objašnjeno, XML takođe omogućava efikasnu upotrebu i ponovnu upotrebu podataka. Mehanizam ponovne upotrebe podataka naziva se XSLT transformacija (ili jednostavno transformacija).

Vi (ili vaš IT odjel) također možete koristiti transformacije za razmjenu podataka između pozadinskih sistema, kao što je između baza podataka. Pretpostavimo da baza podataka A ima podatke o prodaji u tabeli koja je korisna za odjel prodaje. Baza podataka B pohranjuje podatke o prihodima i rashodima u tabeli posebno dizajniranoj za računovodstvo. Baza podataka B može koristiti transformaciju da uzme podatke iz baze podataka A i stavi ih u odgovarajuće tabele.

Kombinacija datoteke podataka, šeme i transformacije čini osnovni XML sistem. Sljedeća slika prikazuje rad takvih sistema. Datoteka podataka se provjerava u skladu s pravilima sheme, a zatim se šalje na bilo koji prikladan način za transformaciju. U ovom slučaju, transformacija postavlja podatke u tabelu na web stranici.

Sljedeći primjer pokazuje transformaciju koja učitava podatke na tabelu na web stranici. Poenta primjera nije u tome da se objasni kako se kreiraju transformacije, već da se pokaže jedan od oblika koje oni mogu poprimiti.

Ime Breed Dob izmijenjeno Declawed Licenca Vlasnik

Ovaj primjer pokazuje kako bi tekst jednog od tipova transformacije mogao izgledati, ali imajte na umu da se možete ograničiti na jasan opis onoga što vam je potrebno od podataka, a ovaj opis možete napraviti na vašem jeziku. Na primjer, možete otići u IT odjel i reći da trebate ispisati podatke o prodaji za određene regije za posljednje dvije godine i da bi ti podaci trebali izgledati ovako i onako. Nakon toga, stručnjaci odjela mogu napisati (ili modificirati) transformaciju kako bi ispunili vaš zahtjev.

Microsoft i sve veći broj drugih kompanija stvaraju transformacije za različite zadatke koji korištenje XML-a čine još praktičnijim. U budućnosti će najvjerovatnije biti moguće preuzeti konverziju koja odgovara vašim potrebama uz malo ili nimalo prilagođavanja. To znači da će s vremenom upotreba XML-a postati sve jeftinija.

XML u sistemu Microsoft Office

Profesionalna izdanja Officea pružaju poboljšanu podršku za XML. Počevši od sistema Microsoft Office 2007, Microsoft Office koristi formate datoteka zasnovane na XML-u kao što su DOCX, XLSX i PPTX. Budući da XML pohranjuje podatke u tekstualnom formatu, a ne u vlastitom binarnom formatu, klijenti mogu definirati vlastite sheme i koristiti vaše podatke na mnogo načina bez plaćanja tantijema. Za više informacija o novim formatima pogledajte Otvoreni XML formati i ekstenzije naziva datoteke. Ispod su ostale pogodnosti.

Sve je ovo sjajno, ali šta ako imate XML podatke bez šeme? Zavisi koji Office program koristite. Na primjer, kada otvorite XML datoteku bez šeme u Excelu, ona pretpostavlja da shema postoji i omogućava vam da učitate podatke u XML tablicu. Možete koristiti XML liste i tabele za sortiranje, filtriranje i izračunavanje podataka.

Omogućite XML alate u Officeu

Podrazumevano, kartica Developer nije prikazana. Mora se dodati na traku da biste koristili XML komande u sistemu Office.

U prethodnom članku su opisani opšti koncepti vezani za XML. U ovom članku ćemo naučiti kako izvršiti osnovne radnje vezane za promjenu, dodavanje, pretraživanje u XML datoteci.

XML datoteka koja se koristi za primjer.

Mazda 2007 BMW 2009

xml dom

Trenutno naš fajl sadrži sljedeću strukturu:

Odnos između čvorova u XML DOM, osnovni momenti:

1. Bilo koji čvor u DOM stablu ima roditelj ParentNode. U našem primjeru, garaža je roditelj za oba elementa automobila, a oba elementa automobila su zauzvrat roditelji modela i elementa godine.

Kako dobiti roditelj xml elementa automobila?

Console.WriteLine(elmRoot["car"].ParentNode.Name); //Rezultat: garaža

2. Roditelj može imati djecu ChildNodes. Na primjer, za garažni čvor, oba elementa automobila su djeca. Elementi automobila također imaju djecu modela i godine.

ChildNodes, je kolekcija koja pohranjuje sve podređene xml elemente, da biste pristupili željenom elementu, morate navesti njegov indeks. (Indeks uvijek počinje od nule!)

Na primjer: kako dobiti prvi podređeni element?

ElmRoot.ChildNodes;

3. Kao iu običnom životu, dete se može roditi kao prvo prvo dete ili poslednje dete.

Ako uzmemo element automobila kao primjer, onda

FirstChild je model LastChild je godina

4. Zauzvrat, postoje i veze među elementima djeteta, oni mogu biti braća ili sestre, ako povučemo paralele sa stvarnim životom.

Dijete može imati, na primjer, brata prethodnog brata ili sestru i sljedećeg brata sljedećeg brata ili sestru

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

Ako element nije pronađen, onda se izbacuje izuzetak: NullReferenceException, tako da kada radite sa xml, uvijek koristite try catch blokove.

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

LastChild je NextSibling;
FirstChild je prethodni brat;

Koristeći gore opisane metode, možete lako doći do željenog čvora i dobiti bilo koju vrijednost koja vam je potrebna.

Kako dobiti vrijednost xml elementa?

Vrijednost xml elementa može se dobiti pomoću svojstva InnerText, na primjer:

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

Drugi način da dobijete istu vrijednost xml elementa:

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

Redoslijed kretanja kroz DOM stablo:

Garaža -> auto -> model -> Mazda

Uzmi godinu:

ElmRoot["auto"].LastChild.InnerText; //Rezultat: 2007

Slijed:

Garaža -> auto -> godište -> 2007

Još jedan primjer: 3 načina da dobijete isti rezultat.

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

Ako želite dobiti godinu za element sa vrijednošću Mazda:

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

Za BMW (dva načina, dobiti isti rezultat)

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

Kako promijeniti vrijednosti xml elementa?

Korištenje imovine InnerText() možete dobiti i promijeniti vrijednost xml elementa, na primjer, promijeniti godinu.

//Postavi novu vrijednost elmRoot.FirstChild.LastChild.InnerText = "2010"; //Izlaz nove vrijednosti na ekran konzole Console.WriteLine(elmRoot.FirstChild.ChildNodes.Item(1).InnerText); //Rezultat: 2010

Istovremeno, morate zapamtiti da se sve promjene događaju s virtualnom xml datotekom, ako otvorite fizičku datoteku, vidjet ćete da je u njoj i dalje naznačena 2007. godina.

Da bi promjene stupile na snagu, potrebno je koristiti metodu Save, na primjer:

ElmRoot.Save("xml naziv datoteke ili stream");

Sada će se informacije promijeniti u "fizičkoj" xml datoteci.

Kako dobiti broj podređenih elemenata?

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

garaža -> auto sadrži 2 djece: model i godište

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

garaža -> auto -> model sadrži 1 xml podređeni element.

Pristup podređenim elementima

po indeksu

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

Sa petljom

Foreach (XmlNode nod u elmRoot.ChildNodes) ( Console.WriteLine(nod.Name); ) //Rezultat: auto, auto

Kako dobiti naziv xml elementa?

elmRoot.Name; //Rezultat: garaža

Kreiranje novog XML elementa

Kreirajmo novi element u našem XML dokumentu da ga razlikujemo od druga dva (automobila), nazovimo ga autobusom.

Prilikom kreiranja novog elementa koristit ćemo preporuku sa msdn stranice i koristiti metodu CreateElement umjesto standardnog novog XmlElementa.

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

Kreiranje i dodavanje novog xml elementa

Kreirajmo novi xml element pod nazivom "BUS".

XmlElement elmRoot = xmlDoc.DocumentElement; Console.WriteLine(elmRoot.ChildNodes.Count); //automobil, auto XmlElement elmNew = xmlDoc.CreateElement("bus"); elmRoot.AppendChild(elmNew); Console.WriteLine(elmRoot.ChildNodes.Count); //3 auto, auto, autobus xmlDoc.Save("xml file name");

Objašnjenje:

1. Prvo dobijamo osnovni element na koji ćemo prikačiti nove elemente.

2. Kao test, ispisati trenutni broj djece elementa garaže: 2 (auto i auto)

3. Kreirajte novi BUS element

4. Korištenje metode AppendChild dodajte novi element stablu

5. Ponovo koristimo ček i prikažemo trenutni broj elemenata za element garaže, sada ih ima 3: auto, auto, autobus.

6. Da bi promjene utjecale na fizički fajl, spremamo

U samoj XML datoteci novi element će izgledati ovako:

Kako dodati novi xml element?

Zadatak: kreirajte novi XML element i dodajte mu tekstualni sadržaj, kao što je godina proizvodnje.

String strFilename = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = novi 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();

U XML datoteci:

2006

Radi jasnoće

A sada napravimo čvor "bus", sa istom arhitekturom kao i automobil, odnosno dodajmo čvorove: model, godinu i nešto tekstualnog sadržaja.

Kreiranje XML elementa sa podređenim elementima

string strFilename = @"C:\lessons\Auto.xml"; //kreirajte novi xml dokument u memoriji XmlDocument xmlDoc = new XmlDocument(); //učitavanje xml datoteke u memoriju xmlDoc.Load(strFilename); //Nabavite korijenski element XmlElement elmRoot = xmlDoc.DocumentElement; //Kreiraj 3 elementa: sabirnica, model, godina XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("godina"); //Postavi vrijednosti za elemente: model, godina XmlText year_txt = xmlDoc.CreateTextNode("2006"); //XmlText mod_txt = xmlDoc.CreateTextNode("liaz"); dodaj inače //Dodaj dva podređena elementa elementu sabirnice: model i godina elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); //Dodavanje vrijednosti čvorovima modela i godine elmModel.InnerText = "liaz"; elmYear.AppendChild(year_txt); //Dodavanje nove sabirnice xml elemenata stablu elmRoot.AppendChild(elmBUS); //Provjeri da li je sve ispravno dodano Console.WriteLine(elmRoot.ChildNodes.FirstChild.InnerText); Console.WriteLine(elmRoot.LastChild.LastChild.InnerText); //Ako je sve u redu, onda koristite metodu Save xmlDoc.Save("xml file name");

rezultat:

liaz 2006

Kako možete skratiti ovaj kod? Na primjer, kako slijedi:

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = novi XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("godina"); //Dodavanje vrijednosti čvorovima modela i godine elmModel.InnerText = "liaz"; elmYear.InnerText = "2006"; elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); elmRoot.AppendChild(elmBUS); //Ako je sve ispravno, pozovite metodu Save xmlDoc.Save("xml file name");

Skratimo još malo kod, za ovo ćemo koristiti svojstvo InnerXml:

XmlDocument xmlDoc = novi XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmXML = xmlDoc.CreateElement("bus"); string txt=" liaz" + "2006"; //InnerXml! elmXML.InnerXml = txt; //xmlDoc.DocumentElement (biće jednak garaži) je još jedan način pristupa korijenskom elementu, isto kao i XmlElement elmRoot = xmlDoc.DocumentElement; xmlDoc.AppendElement(xmlDoc.AppendElement). ;xmlDoc.Save(PathXmlFile);

Rezultat

Dobijte listu elemenata pomoću GetElementByTagName

GetElementByTagName vraća XmlNodeList, koji sadrži sve elemente potomke koji pripadaju navedenom elementu, na primjer, moramo dobiti sve modele automobila koji su pohranjeni u garaži:

XmlDocument xmlDoc = novi XmlDocument(); xmlDoc.Load(strFilename); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); foreach (XmlNode čvor u modelName) ( Console.WriteLine(node.InnerText); ) //Rezultat: mazda, bmw, liaz

Referenca sa indeksom:

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

Kako mogu promijeniti tekstualni sadržaj novokreiranog elementa "bus" koristeći metodu GetElementByTagName?

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

Ili možete promijeniti ime liaz u Ikarus

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

Prošlo je dosta vremena otkako sam obećao da ću govoriti o radu sa XML podacima prilikom razvoja .NET aplikacija. Obećanja se moraju održati. Napominjemo da ovaj članak nije namijenjen profesionalnim .NET programerima, već onima koji još nemaju značajno iskustvo u kreiranju .NET aplikacija.


Zašto trebamo raditi sa XML-om?

Ako još uvek nemate baš dobru predstavu o tome šta je XML, onda preporučujem da pročitate članak "XML je stvarno i na duže vreme" u "KV" br. 2007. Da bi se uštedio prostor za važnije stvari, sam XML format ovdje neće biti analiziran.

Prije nego što počnete da se upoznate s programskim kodom, morate odgovoriti na jedno fundamentalno pitanje: zašto uopće uključiti XML podršku u svoju aplikaciju? Mislim da su se mnogi postavljali ovo pitanje u vezi sa mnogim tehnologijama, a nisu sve bile uključene u aplikacije nakon odgovora. Međutim, stvari su malo drugačije s XML-om i postoje stvarni razlozi za korištenje ovog formata u mnogim situacijama.

Glavna prednost XML-a je da, budući da je po prirodi tekstualni format, on vam ipak savršeno omogućava pohranjivanje i prijenos svih podataka. Budući da je ovaj format tekstualni, problem njegove krosplatformske prirode rješava se sam od sebe, a problem prosljeđivanja XML podataka jednako se lako rješava (kao npr. u SOAP-u). Osim toga, možete jednostavno promijeniti format prijenosa ili pohrane dodavanjem novih atributa i ne brinuti previše o kompatibilnosti s prethodnim verzijama formata, budući da će aplikacije koje koriste staru verziju moći čitati ono što im treba bez obraćanja pažnje na nove oznake ili atributi. Mnoge aplikacije koriste formate datoteka zasnovane na XML-u, mnogi komunikacijski protokoli su također bazirani na XML-u, a lista i jednog i drugog nastavlja da raste.

Naravno, s druge strane, XML nije previše ekonomičan, jer, kako je jednom od posjetitelja foruma Computer News jednom ispravno primijetio, XML dokumenti se često sastoje od 10% podataka i 90% oznaka. Međutim, to već uvelike ovisi o tome koje oznake odaberete. Možeš pisati st. Melnikaite, 2, Mogu li . Mada, da budem iskren, čini mi se da sa sadašnjim hard diskovima i debelim kanalima nema smisla posebno se smanjivati.

Dakle, u sposobnim rukama, XML je moćna i praktična stvar, a zbog sveprisutnosti ovog formata, od njega ne možete nigdje doći. Dakle, pređimo na pisanje koda.

Za programiranje ćemo koristiti glavni jezik .NET platforme - C#. Kako bi što više čitalaca za sebe uvježbalo gornji programski kod, koristiću prvu verziju C# i .NET Framework "a.


Snimanje podataka

Prvo, hajde da pričamo o pisanju podataka, jer, znate, da biste nešto pročitali odnekud, prvo morate negde nešto napisati. A čim se bavimo programiranjem, onda nam nije prikladno kreirati XML podatke sa "ručicama". Stoga, hajde da se prvo pozabavimo pisanjem podataka u XML.

Da biste započeli, kreirajte novi projekat u Visual Studio, #Develop ili C# Builder i dodajte System.Xml na listu uvezenih imenskih prostora.

Posebna klasa XmlTextWriter zadužena je za pisanje XML podataka u .NET Framework, što vam omogućava da upisujete XML podatke u proizvoljni tok. To jest, mi, općenito govoreći, možemo ih pisati s njom u datoteku, iu bazu podataka, i poslati nekome preko Interneta, ali za sada ćemo sve zapisati u datoteku. Možete preusmjeriti izlaz promjenom konstruktora objekta (tj. prosljeđivanjem ne imena datoteke i njenog kodiranja tokom inicijalizacije, već objekta koji je tok podataka ).Mislim da sam malo ispred sebe, hajde da prvo pogledamo kod odgovoran za pisanje podataka u našu XML datoteku.

String Ime datoteke = "c:\\demo.xml"; XmlTextWriter xml = novi XmlTextWriter(FileName, System.Text.Encoding.Unicode); xml.Formatting = Formatiranje.Uvučeno; xml.WriteStartDocument(); xml.WriteStartElement("rootelement"); za (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();

Mislim da je prvi red sasvim jasan – to je samo zapis imena fajla u koji ćemo sačuvati podatke. Zatim kreiramo objekat tipa XmlTextWriter (zove se, kao što vidite, xml) i sa njim ćemo izvoditi sve dalje operacije. Imajte na umu da kada konstruišemo objekat, takođe navodimo kodiranje u kojem će XML biti napisan: u našem primeru, ovo je Unicode. Sljedeći red, općenito govoreći, nije obavezan, ali će naš XML dokument, kako kažu, učiniti čitljivim za ljude, odnosno dodati će potrebna uvlake i razbiti ga na redove. Bez toga bi cijeli dokument bio napisan u jednom redu, što ga, uz uštedu prostora, čini praktički nepogodnim za ručno uređivanje.

Pisanje dokumenta počinje pozivom metode WriteStartDocument () našeg xml objekta. Red koji slijedi dodaje korijenski element "rootelement" našem XML dokumentu (podsjetimo, za XML dokumente, korijenski element mora biti prisutan u jednoj instanci). Zatim, u petlji, dodajemo još deset elemenata koji ne nose nikakvo semantičko opterećenje u naš XML dokument, za svaki od kojih postavljamo dva atributa i još deset podelemenata. Imajte na umu da možemo dodati broj nizu bez eksplicitne konverzije podataka, ali ako broj mora u potpunosti formirati string, onda se mora eksplicitno konvertirati metodom ToString(). Također imajte na umu da moramo eksplicitno zatvoriti svaki od elemenata našeg XML dokumenta, a zatim i cijeli dokument.

Sada kada je naš XML dokument uspješno napisan, hajde da vidimo kako možemo čitati podatke iz njega.


Čitanje podataka

Dodajte komponentu listBox u formu vaše aplikacije (osim ako, naravno, nije konzolna) tako da možete pratiti rezultat čitanja XML datoteke. Pa, ako je vaš program konzolni, onda možete lako preusmjeriti izlaz na konzolu.

Kao i obično, prvo ćemo se upoznati sa programskim kodom, a zatim ćemo vidjeti šta tačno ovaj kod radi.

XmlTextReader xml = novi XmlTextReader(FileName); xml.WhitespaceHandling = WhitespaceHandling.None; int i = 0; while (xml.Read())( if ((xml.NodeType == XmlNodeType.Element) & (xml.Name == "podelement")) ( listBox1.Items.Add("podelement " + i + " pronađen") ; 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();

Za čitanje, kao što ste možda primijetili, koristimo drugu klasu, odnosno XmlTextReader. Nalazi se u istom imenskom prostoru kao i klasa koju smo koristili za pisanje podataka. U prvom redu kreiramo instancu XmlTextReader pod nazivom xml (ovdje pretpostavljamo da je varijabla FileName već definirana od strane nas ranije).Da bismo preskočili prazne redove, ako se takvi pojave na neki nerazumljiv način u našoj novokreiranoj XML datoteci, koristimo sljedeći red u isječku koda iznad. Varijabla i se koristi za brojanje broja elemenata "podelementa" koji se nalaze u XML datoteci iz koje se podaci čitaju.

Zatim slijedi ciklus direktnog čitanja podataka iz datoteke. Read() metoda čita sljedeći element XML dokumenta, a nakon čitanja provjeravamo šta smo tačno pročitali. Ako je to zaista "podelement", tada dodajemo informacije o pročitanom elementu u listBox1, povećavamo varijablu koja sadrži broj pročitanih elemenata, a zatim čitamo atribute elementa. Nakon čitanja atributa, organiziramo zasebnu petlju za čitanje podelementa "subsubelement" (imajte na umu da nam za ovo nije potreban poseban XmlTextReader) i atributa ovih podelemenata. Kao i prije, sve pročitane informacije unosimo u listBox1 za kontrolu ispravno čitanje.

Prilikom čitanja XML datoteka, na isti način kao i prilikom njihovog pisanja, prilikom konstruiranja XmlTextReader-a "a, možete odrediti kao parametar tok iz kojeg će se čitanje vršiti, a tada će biti moguće čitati ne samo iz datoteka, ali i iz drugih izvora, čije sam primjere već naveo gore. Treba napomenuti jednu korisnu osobinu klase XmlTextReader: prilikom čitanja ne učitava cijeli čitljivi XML dokument u memoriju, pa ga je zgodno koristiti za raščlanjivanje velike XML dokumente (na primjer, XML baze podataka).


Iza scene

Općenito, primjer koji smo upravo analizirali je previše jednostavan za prave projekte. Danas, kada se čitaju XML dokumenti, po pravilu se validiraju pomoću DTD, XML Schema ili Relax NG. Validacija je provjera da li je oznaka XML dokumenta u skladu sa nekim standardom opisanim u vanjskoj datoteci. Validacija je potrebna tako da verifikacija dokumenta nije ugrađena u algoritam programa, već se može proizvoljno promijeniti prilikom promjene formata podataka bez ažuriranja programskog koda koji čita ili upisuje podatke. Nažalost, sada nećemo imati vremena da analiziramo validaciju, jer, kao što razumijete, obim novinskog članka ima određena ograničenja.

Još jedna zanimljiva i korisna praktična tačka u vezi sa radom sa XML podacima je transformacija XSL podataka. Ova transformacija se primjenjuje na podatke kada se prikazuju na HTML stranicama i, u stvari, jednostavno je primjena određenog predloška web stranice na XML datoteku s nekim podacima. Budući da najveći dio trenutne upotrebe XML podataka na ovaj ili onaj način otpada na World Wide Web, bilo bi vrlo, vrlo dobro razmotriti XSL transformacije.

Dakle, mislim da će ovaj članak imati nastavak - ali, naravno, samo ako vi sami (odnosno čitaoci Computer News-a) pitate o tome na forumu ili u pismu na moju email adresu. Za sada, o upotrebi XML-a u .NET aplikacijama, možda je to to. Nadamo se da će vam ove informacije biti korisne.