Kako čitati XML u C#

Kako Citati Xml U C



Naširoko korišteni format podataka za internetsko dijeljenje podataka je XML, budući da se podaci mogu pohraniti u njemu i razmjenjivati ​​između sustava na fleksibilan i korisniku jednostavan način. U C#-u je čitanje XML datoteka uobičajen zadatak, a .NET framework nudi različite klase i metode za raščlanjivanje i čitanje XML datoteka. Ovaj post govorit će o korištenju .NET okvira za čitanje XML-a u C#.

Čitanje XML-a u C#

Postoji nekoliko načina za čitanje XML datoteke u C# i svaki način ima svoje prednosti i nedostatke, a izbor ovisi o zahtjevima projekta. Ispod je nekoliko načina za čitanje XML datoteke u C#:

Ovo je sadržaj XML datoteke koju sam izradio i koja će se koristiti za demonstraciju u budućim metodama:







< ?xml verzija = '1,0' kodiranje = 'utf-8' ? >
< zaposlenici >
< zaposlenik >
< iskaznica > 1 iskaznica >
< Ime > Sam Boš Ime >
< odjelu > Marketing odjelu >
< plaća > 50000 plaća >
zaposlenik >
< zaposlenik >
< iskaznica > 2 iskaznica >
< Ime > Jane Doe Ime >
< odjelu > Financije odjelu >
< plaća > 60000 plaća >
zaposlenik >
< zaposlenik >
< iskaznica > 3 iskaznica >
< Ime > James Ime >
< odjelu > Ljudski resursi odjelu >
< plaća > 70000 plaća >
zaposlenik >
zaposlenici >

1: Korištenje XmlDocumenta

Za čitanje XML datoteke u C#, možete koristiti klasu XmlDocument ili klasu XDocument, a obje su dio imenskog prostora System.Xml. Klasa XmlDocument pruža DOM (Document Object Model) pristup za čitanje XML-a, dok klasa XDocument pruža LINQ (Language-Integrated Query) pristup. Evo primjera korištenja klase XmlDocument za čitanje XML datoteke:



korištenje sustava;
koristeći System.Xml;

razreda Program
{
statička praznina Glavni ( niz [ ] args )
{
XmlDocument doc = novi XmlDocument ( ) ;
dok.Učitaj ( 'zaposlenici.xml' ) ;

XmlNodeList čvorovi = doc.DocumentElement.SelectNodes ( '/zaposlenici/zaposlenik' ) ;

za svakoga ( XmlNode čvor u čvorovi )
{
niz iskaznica = čvor.SelectSingleNode ( 'iskaznica' ) .InnerText;
naziv niza = čvor.SelectSingleNode ( 'Ime' ) .InnerText;
odjel niza = čvor.SelectSingleNode ( 'odjel' ) .InnerText;
string plaća = čvor.SelectSingleNode ( 'plaća' ) .InnerText;
Konzola.WriteLine ( 'ID: {0}, ime: {1}, odjel: {2}, plaća: {3}' , iskaznica , ime, odjel, plaća ) ;
}
}
}

Ovaj kod koristi klasu XmlDocument za učitavanje XML datoteke i metodu SelectNodes za dohvaćanje popisa čvorova zaposlenika. Zatim za svaki čvor zaposlenika koristi metodu SelectSingleNode za dohvaćanje vrijednosti podređenih čvorova ID-a, imena, odjela i plaće te ih prikazuje pomoću Console.WriteLine:







2: Korištenje XDocumenta

Alternativno, također možete koristiti klasu XDocument za čitanje XML datoteke korištenjem LINQ pristupa, a u nastavku je kôd koji ilustrira kako se to radi:

korištenje sustava;

razreda Program
{
statička praznina Glavni ( niz [ ] args )
{
XDocument doc = XDocument.Load ( 'zaposlenici.xml' ) ;

za svakoga ( XElement element u doc.Potomci ( 'zaposlenik' ) )
{
int iskaznica = int.Parse ( element.Element ( 'iskaznica' ) .Vrijednost ) ;
naziv niza = element.Element ( 'Ime' ) .Vrijednost;
string odjel = element.Element ( 'odjel' ) .Vrijednost;
int plaća = int.Parse ( element.Element ( 'plaća' ) .Vrijednost ) ;
Konzola.WriteLine ( $ 'ID: {id}, ime: {name}, odjel: {odjel}, plaća: {plata}' ) ;
}
}
}

XML datoteka se učitava u objekt XDocument pomoću metode XDocument.Load. Svi elementi 'zaposlenika' XML datoteke zatim se dohvaćaju pomoću tehnike potomaka. Za svaki element, njegovim podređenim elementima pristupa se pomoću metode Element, a njihove se vrijednosti izdvajaju pomoću svojstva Value. Na kraju, ekstrahirani podaci se ispisuju na konzolu.



Imajte na umu da XDocument pripada prostoru imena System.Xml.Linq, tako da trebate uključiti sljedeću izjavu using na vrhu vaše C# datoteke

3: Korištenje XmlReadera

XmlReader je brz i učinkovit način čitanja XML datoteke u C#. Datoteku čita sekvencijalno, što znači da učitava samo jedan po jedan čvor, što ga čini idealnim za rad s velikim XML datotekama s kojima bi inače bilo teško rukovati u memoriji.

korištenje sustava;
koristeći System.Xml;

razreda Program
{
statička praznina Glavni ( niz [ ] args )
{
korištenjem ( XmlReader čitač = XmlReader.Create ( 'zaposlenici.xml' ) )
{
dok ( čitatelj.Čitaj ( ) )
{
ako ( reader.NodeType == XmlNodeType.Element && čitatelj.Ime == 'zaposlenik' )
{
Konzola.WriteLine ( 'ISKAZNICA: ' + čitač.GetAttribute ( 'iskaznica' ) ) ;
čitač.ReadToDescendant ( 'Ime' ) ;
Konzola.WriteLine ( 'Ime: ' + čitač.ReadElementContentAsString ( ) ) ;
čitač.ReadToNextSibling ( 'odjel' ) ;
Konzola.WriteLine ( 'Odjel: ' + čitač.ReadElementContentAsString ( ) ) ;
čitač.ReadToNextSibling ( 'plaća' ) ;
Konzola.WriteLine ( 'Plaća: ' + čitač.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

U ovom primjeru koristimo metodu XmlReader.Create za stvaranje instance XmlReadera i prosljeđivanje putanje XML datoteke kao parametra. Zatim koristimo while petlju za čitanje XML datoteke čvor po čvor koristeći metodu Read XmlReader-a.

Unutar petlje prvo provjeravamo je li trenutni čvor element zaposlenika pomoću svojstava NodeType i Name XmlReader-a. Ako je tako, koristimo metodu GetAttribute za dohvaćanje vrijednosti ID atributa.

Zatim koristimo metodu ReadToDescendant za premještanje čitača na element name unutar elementa zaposlenika. Vrijednost elementa naziva tada se dobiva pomoću funkcije ReadElementContentAsString.

Slično tome, koristimo metodu ReadToNextSibling za premještanje čitača na sljedeći srodni element i dobivanje vrijednosti elemenata odjela i plaće.

Naposljetku, koristimo block using kako bismo osigurali da je objekt XmlReader ispravno uklonjen nakon što završimo s čitanjem XML datoteke:

4: XML u LINQ

Čitanje XML datoteke pomoću LINQ to XML u C# moćan je način za pristup XML podacima i manipuliranje njima. LINQ to XML je komponenta LINQ tehnologije koja pruža jednostavan i učinkovit API za rad s XML podacima.

korištenje sustava;
koristeći System.Linq;
koristeći System.Xml.Linq;

razreda Program
{
statička praznina Glavni ( niz [ ] args )
{
XDocument doc = XDocument.Load ( 'zaposlenici.xml' ) ;

var zaposlenici = od e u doc.Potomci ( 'zaposlenik' )
Izaberi novi
{
Id = e.Element ( 'iskaznica' ) .Vrijednost,
Ime = e.Element ( 'Ime' ) .Vrijednost,
Odjel = e.Element ( 'odjel' ) .Vrijednost,
Plaća = e.Element ( 'plaća' ) .Vrijednost
} ;
za svakoga ( var djelatnik u zaposlenici )
{
Konzola.WriteLine ( $ 'Id: {employee.Id}, ime: {employee.Name}, odjel: {employee.Department}, plaća: {employee.Salary}' ) ;
}
}
}

U ovom kodu prvo učitavamo XML datoteku pomoću metode XDocument.Load(). Zatim koristimo LINQ to XML za upit XML podataka i odabir ID-a, imena, odjela i elemenata plaće za svaki element zaposlenika. Ove podatke pohranjujemo u anonimnom obliku, a zatim prolazimo kroz rezultate kako bismo podatke o zaposleniku ispisali na konzoli.

5: Korištenje XPath-a

XPath je upitni jezik koji se koristi za navigaciju kroz XML dokument za lociranje određenih elemenata, atributa i čvorova. To je učinkovit alat za pretraživanje i filtriranje informacija u XML dokumentu. U C#, možemo koristiti jezik XPath za čitanje i izvlačenje podataka iz XML datoteka.

korištenje sustava;
koristeći System.Xml.XPath;
koristeći System.Xml;

razreda Program
{
statička praznina Glavni ( niz [ ] args )
{
XmlDocument doc = novi XmlDocument ( ) ;
dok.Učitaj ( 'zaposlenici.xml' ) ;

// Stvorite XPathNavigator iz dokumenta
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Prevedite XPath izraz
XPathExpression ekspr = nav.Sastaviti ( '/zaposlenici/zaposlenik/ime' ) ;

// Procijenite izraz i iterirajte kroz rezultate
XPathNodeIterator iterator = nav.Select ( ekspr ) ;
dok ( iterator.MoveNext ( ) )
{
Konzola.WriteLine ( iterator.Current.Value ) ;
}
}
}

Ovaj kod učitava datoteku “employees.xml” koristeći XmlDocument, stvara XPathNavigator iz dokumenta i kompilira XPath izraz za odabir svih elemenata ispod elemenata . Zatim procjenjuje izraz i ponavlja rezultate, ispisujući vrijednost svakog elementa .

Bilješka: korištenje XPatha može biti moćan i fleksibilan način odabira elemenata i atributa iz XML dokumenta, ali može biti i složenije od nekih drugih metoda o kojima smo raspravljali.

Zaključak

Korištenje klase XmlDocument pruža potpune mogućnosti manipulacije DOM-om, ali može biti sporije i memorijski intenzivnije od ostalih metoda. Klasa XmlReader dobra je opcija za čitanje velikih XML datoteka, budući da pruža brz pristup koji se temelji samo na prosljeđivanju i nije u predmemoriji. Klasa XDocument pruža jednostavniju i koncizniju sintaksu, ali možda neće biti tako učinkovita kao XmlReader. Uz to, metode LINQ to XML i XPath pružaju moćne mogućnosti postavljanja upita za izvlačenje određenih podataka iz XML datoteke.