opciono(Vežba 2: XmlTextReader)
Otvaranje XML fajla
Prilikom kreiranja objekta klase XmlTextReader, i isto vreme se može otvoriti vaš XML fajl. U sledećem primeru se kreira objekat klase XmlTextReader sa nazivom mojReader i pokazuje na fajl sa nazivom nazivFajla. Naziv fajla u sebi može da sadrži i kompletnu putanju do fajla.
XmlTextReader mojReader = new XmlTextReader("nazivFajla");
(postoje i drugi načini za kreiranje objekta klase XmlTextReader, ali to ne ulazi u okvir ove lekcije)
Čitanje podataka:
Za čitanje podataka iz XML fajla može da se koristi dosta metoda XmlTextReader objekta, od kojih pominjemo samo neke:
|
Metod |
Opis |
|
Read |
Čita sledeći čvor unutar XML fajla |
|
ReadAttributeValue |
čita vrednost atributa |
|
ReadBase64 |
|
|
ReadBinHex |
|
|
ReadChars |
čita karaktere |
|
ReadElementString |
čita samo tekstualne elemente |
|
ReadEndElement |
čita završni element |
|
ReadInnerXml |
Čita ceo sadržaj iz XML čvora u string |
|
ReadOuterXml |
čita i ceo XML čvor i njegov sadržaj u string |
|
ReadStartElement |
Čita početni element |
|
ReadString |
Čita vrednost element ili tekstualni sadržaj čvora u string |
Read metoda je dosta fleksibilna: čita svaki čvor u XML fajlu posebno. Zatim može da se proveri za svaki od njih redom koja su vrsta i šta raditi sa njima. Ova provera može da se izvrši poređenjem vrednosti koja je pročitana iz XmlTextReader objekta sa vrednostima za XmlNodeType. Moguće vrednosti enumeracije za XmlNodeType su u sledećoj tabeli:
|
Vrednost |
Opis |
|
XmlNodeType.Attribute |
Atribut |
|
XmlNodeType.CDATA |
CDATA deo |
|
XmlNodeType.Comment |
XML komentar |
|
XmlNodeType.Document |
document node, (koreni čvor) |
|
XmlNodeType.DocumentFragment |
document fragment XML-a koji nije povezan sa actualnim documentom |
|
XmlNodeType.DocumentType |
document type tag |
|
XmlNodeType.Element |
start tag za element |
|
XmlNodeType.EndElement |
end tag za element |
|
XmlNodeType.EndEntity |
end tag za entity (fizički, XML document se sastoji od delova koji se zovu entiteti) |
|
XmlNodeType.Entity |
entitet |
|
XmlNodeType.EntityReference |
referenca na entitet |
|
XmlNodeType.None |
vraća se kada metoda Read objekta klase XmlTextReader nije pozvana |
|
XmlNodeType.Notation |
Oznaka u deklaraciji dokumenta |
|
XmlNodeType.ProcessingInstruction |
processing instrukcija u XML fajlu |
|
XmlNodeType.SignificantWhitespace |
|
|
XmlNodeType.Text |
tekstualni sadržaj čvora |
|
XmlNodeType.Whitespace |
razmaci između pojedinih delova |
|
XmlNodeType.XmlDeclaration |
deklaracija XML dokumenta |
U toku čitanja podataka iz objekta klase XmlTextReader, određuje se da li je to važno ili ne za aplikaciju. Kako se koja stavka pročita, pokazivač se uvećeve tako da pokazuje na sledeću stavku. Kao što je već pomenuto, nije moguće vraćanje na prethodnu stavku prilkom korišćenja XmlTextReader-a jer je sa njim čitanje FORWARD ONLY.
Zatvaranje XmlTextReader objekta
Nakon što je pročitan sadržaj fajla, trebalo bi taj fajl i zatvoriti. Za to se koristo metoda Close i sa njom se ujedno i oslobađaju korišćeni resursi:
mojReader.Close();
Zadatak:
Pročitati jedan XML fajl i za to koristiti XmlTextReader. Za svaki čvor prikazati tip čvora, vrednost i naziv čvora. Ako može, prikazati i format podataka (formatiranje)
Ovde ćemo upotrebiti fajl koji je kreiran u prethodnom primeru (C:\ucenik\Videos.xml), a vi možete upotrebiti bilo koju validnu adresu.
Program prolazi kroz XML fajl korišćenjem metode Read. Sa svakim pozivom metode Read, prikazuje se tip čvora, zajedno sa vrednošću i imenom. Aplikacija takođe prikazuje podatke sa formatiranjem.
Evo kako treba da izgleda forma:

(Programski kod za Form1.cs)
U ovom programskom kodu se koristi metoda Read da bi se pročitao svaki XML čvor iz fajla. Jednom kada je čvor pročitan, sledećih nekoliko linija se koriste za prenos vrednosti iz čvora na ekran:
txtNode.Text = xtr.NodeType.ToString(); txtName.Text = xtr.Name.ToString(); txtValue.Text = xtr.Value.ToString();
Tip čvora se čuva u propertiju NodeType od xtr (naš objekat kalse XmlTextReader). Kada se klikne na taster Sledeći, prikazuje se sledeći čvor. Primetićete da nemaju svi tipovi čvorova i ime i vrednost.
Nakon što su postavljene vrednosti na ekranu, tip čvora u xtr se poredi sa različitim vrstama XmlNodeType pomoću switch sintakse. U tom switch iskazu se formatiraju pročitani XML podaci u zavisnosti od vrste a informacije se prikazuju u dijalogu.
Kada se stigne do kraja fajla, vrednosti u dijalog boksu se postavljaju na EOF.
(izvor: Reading and Writing XML - http://etutorials.org/Programming/visual-c-sharp/Part+IV+Data+Access+and+XML/Chapter+19+XML/Reading+and+Writing+XML/ )