Kaip skaityti XML C#

Kaip Skaityti Xml C



Plačiai naudojamas duomenų formatas, skirtas dalytis duomenimis internete, yra XML, nes jame duomenys gali būti saugomi ir keičiamasi tarp sistemų lanksčiai ir patogiai. C# kalboje XML failų skaitymas yra įprasta užduotis, o .NET sistema suteikia įvairias klases ir metodus, skirtas analizuoti ir skaityti XML failus. Šiame įraše bus perskaityta naudojant .NET sistemą XML skaitymui C#.

XML skaitymas C#

Yra keletas būdų, kaip skaityti XML failą C# ir kiekvienas metodas turi savo privalumų ir trūkumų, o pasirinkimas priklauso nuo projekto reikalavimų. Žemiau yra keletas būdų, kaip skaityti XML failą C#:

Štai XML failo, kurį sukūriau ir kuris bus naudojamas demonstruojant būsimus metodus, turinys:







< ?xml versija = '1.0' kodavimas = 'utf-8' ? >
< darbuotojų >
< darbuotojas >
< id > 1 id >
< vardas > Samas Bošas vardas >
< skyrius > Rinkodara skyrius >
< atlyginimas > 50 000 atlyginimas >
darbuotojas >
< darbuotojas >
< id > 2 id >
< vardas > Jane Doe vardas >
< skyrius > Finansai skyrius >
< atlyginimas > 60 000 atlyginimas >
darbuotojas >
< darbuotojas >
< id > 3 id >
< vardas > Džeimsas vardas >
< skyrius > Žmogiškieji ištekliai skyrius >
< atlyginimas > 70 000 atlyginimas >
darbuotojas >
darbuotojų >

1: XmlDocument naudojimas

Norėdami skaityti XML failą C#, galite naudoti XmlDocument klasę arba XDocument klasę, kurios abi yra System.Xml vardų erdvės dalis. XmlDocument klasė suteikia DOM (dokumento objektų modelio) metodą XML skaitymui, o XDocument klasė suteikia LINQ (kalbos integruotos užklausos) metodą. Štai pavyzdys, kaip XmlDocument klasė naudojama XML failui skaityti:



naudojant sistemą;
naudojant System.Xml;

klasės programa
{
statinė tuštuma Pagrindinis ( styga [ ] args )
{
XmlDocument doc = naujas XmlDocument ( ) ;
doc.Įkelti ( 'darbuotojai.xml' ) ;

XmlNodeList nodes = doc.DocumentElement.SelectNodes ( '/darbuotojai/darbuotojas' ) ;

kiekvienam ( XmlNode mazgas in mazgai )
{
styga id = mazgas.SelectSingleNode ( 'id' ) .InnerText;
eilutės pavadinimas = mazgas.SelectSingleNode ( 'vardas' ) .InnerText;
eilutės skyrius = mazgas.SelectSingleNode ( 'departamentas' ) .InnerText;
eilutė alga = mazgas.SelectSingleNode ( 'atlyginimas' ) .InnerText;
Console.WriteLine ( 'ID: {0}, vardas: {1}, skyrius: {2}, atlyginimas: {3}' , id , pavadinimas, skyrius, atlyginimas ) ;
}
}
}

Šis kodas naudoja XmlDocument klasę, kad įkeltų XML failą, ir SelectNodes metodą, kad gautų darbuotojų mazgų sąrašą. Tada kiekvienam darbuotojo mazgui jis naudoja SelectSingleNode metodą, kad gautų ID, pavadinimo, skyriaus ir atlyginimo antrinių mazgų reikšmes ir parodytų jas naudodamas Console.WriteLine:







2: XDocument naudojimas

Arba taip pat galite naudoti XDocument klasę, kad skaitytumėte XML failą naudodami LINQ metodą, o toliau pateikiamas kodas, iliustruojantis, kaip tai padaryti:

naudojant sistemą;

klasės programa
{
statinė tuštuma Pagrindinis ( styga [ ] args )
{
XDocument doc = XDocument.Load ( 'darbuotojai.xml' ) ;

kiekvienam ( XElement elementas in doc.Palikuonys ( 'darbuotojas' ) )
{
tarpt id = int.Išnagrinėti ( elementas.Elementas ( 'id' ) .Vertė ) ;
eilutės pavadinimas = elementas.Elementas ( 'vardas' ) .Vertė;
stygų skyrius = elementas.Elementas ( 'departamentas' ) .Vertė;
int atlyginimas = int.Parse ( elementas.Elementas ( 'atlyginimas' ) .Vertė ) ;
Console.WriteLine ( $ 'ID: {id}, vardas: {vardas}, skyrius: {department}, atlyginimas: {alga}' ) ;
}
}
}

XML failas įkeliamas į XDocument objektą naudojant XDocument.Load metodą. Tada visi XML failo „darbuotojo“ elementai nuskaitomi naudojant „Descendants“ techniką. Kiekvieno elemento antriniai elementai pasiekiami naudojant elementų metodą, o jų reikšmės išgaunamos naudojant ypatybę Value. Galiausiai išgauti duomenys atspausdinami į konsolę.



Atkreipkite dėmesį, kad XDocument priklauso System.Xml.Linq vardų erdvei, todėl C# failo viršuje turite įtraukti šiuos teiginius.

3: XmlReader naudojimas

XmlReader yra greitas ir efektyvus būdas skaityti XML failą C#. Jis skaito failą nuosekliai, o tai reiškia, kad vienu metu įkeliamas tik vienas mazgas, todėl puikiai tinka darbui su dideliais XML failais, kuriuos kitu atveju būtų sunku tvarkyti atmintyje.

naudojant sistemą;
naudojant System.Xml;

klasės programa
{
statinė tuštuma Pagrindinis ( styga [ ] args )
{
naudojant ( XmlReader skaitytuvas = XmlReader.Create ( 'darbuotojai.xml' ) )
{
kol ( skaitytojas.Skaityk ( ) )
{
jeigu ( Reader.NodeType == XmlNodeType.Element && skaitytojas.Vardas == 'darbuotojas' )
{
Console.WriteLine ( 'ID:' + Reader.GetAttribute ( 'id' ) ) ;
skaitytojas.ReadToDescendant ( 'vardas' ) ;
Console.WriteLine ( 'Vardas: ' + Reader.ReadElementContentAsString ( ) ) ;
skaitytojas.SkaitytiKitasBrulis ( 'departamentas' ) ;
Console.WriteLine ( 'Skyrius:' + Reader.ReadElementContentAsString ( ) ) ;
skaitytojas.SkaitytiKitasBrulis ( 'atlyginimas' ) ;
Console.WriteLine ( 'Atlyginimas:' + Reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

Šiame pavyzdyje naudojame XmlReader.Sukurkite metodą, skirtą sukurti XmlReader egzempliorių ir perduoti XML failo kelią kaip parametrą. Tada naudojame ciklą, kad perskaitytume XML failo mazgą po mazgo, naudodami XmlReader skaitymo metodą.

Ciklo viduje pirmiausia patikriname, ar dabartinis mazgas yra darbuotojo elementas, naudodami XmlReader NodeType ir Name savybes. Jei taip, id atributo vertei gauti naudojame metodą GetAttribute.

Tada naudojame ReadToDescendant metodą, kad skaitytuvą perkeltume į pavadinimo elementą darbuotojo elemento viduje. Tada pavadinimo elemento reikšmė gaunama naudojant funkciją ReadElementContentAsString.

Panašiai naudojame ReadToNextSibling metodą, norėdami perkelti skaitytoją į kitą brolio elementą ir gauti skyriaus bei atlyginimo elementų vertę.

Galiausiai naudojame bloką, kad užtikrintume, jog XmlReader objektas būtų tinkamai pašalintas, kai baigsime skaityti XML failą:

4: XML į LINQ

XML failo skaitymas naudojant LINQ į XML C# yra galingas būdas pasiekti ir valdyti XML duomenis. LINQ to XML yra LINQ technologijos komponentas, suteikiantis paprastą ir veiksmingą API darbui su XML duomenimis.

naudojant sistemą;
naudojant System.Linq;
naudojant System.Xml.Linq;

klasės programa
{
statinė tuštuma Pagrindinis ( styga [ ] args )
{
XDocument doc = XDocument.Load ( 'darbuotojai.xml' ) ;

var darbuotojai = nuo e in doc.Palikuonys ( 'darbuotojas' )
pasirinkite naujas
{
Id = e.Elementas ( 'id' ) .Vertė,
Vardas = e.Elementas ( 'vardas' ) .Vertė,
Skyrius = e.Elementas ( 'departamentas' ) .Vertė,
Atlyginimas = e.Elementas ( 'atlyginimas' ) .Vertė
} ;
kiekvienam ( var darbuotojas in darbuotojų )
{
Console.WriteLine ( $ 'Id: {darbuotojo.Id}, vardas: {darbuotojo.vardas}, skyrius: {darbuotojas.departamentas}, atlyginimas: {darbuotojas.alga}' ) ;
}
}
}

Šiame kode pirmiausia įkeliame XML failą naudodami XDocument.Load() metodą. Tada mes naudojame LINQ į XML, kad pateiktume užklausą XML duomenims ir pasirinktume kiekvieno darbuotojo elemento ID, pavadinimą, skyrių ir atlyginimo elementus. Šiuos duomenis saugome anoniminiu tipu, o tada peržiūrime rezultatus, kad atspausdintume darbuotojo informaciją į konsolę.

5: XPath naudojimas

XPath yra užklausų kalba, naudojama naršyti XML dokumente, siekiant rasti konkrečius elementus, atributus ir mazgus. Tai efektyvi priemonė informacijos paieškai ir filtravimui XML dokumente. C# galime naudoti XPath kalbą duomenims skaityti ir išgauti iš XML failų.

naudojant sistemą;
naudojant System.Xml.XPath;
naudojant System.Xml;

klasės programa
{
statinė tuštuma Pagrindinis ( styga [ ] args )
{
XmlDocument doc = naujas XmlDocument ( ) ;
doc.Įkelti ( 'darbuotojai.xml' ) ;

// Iš dokumento sukurkite XPathNavigator
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Sudarykite XPath išraišką
XPathExpression expr = nav.Sudaryti ( '/darbuotojai/darbuotojas/vardas' ) ;

// Įvertinkite išraišką ir pakartokite rezultatus
XPathNodeIterator iterator = nav.Pasirinkite ( expr ) ;
kol ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iteratorius.Srovė.Vertė ) ;
}
}
}

Šis kodas įkelia „employees.xml“ failą naudodamas XmlDocument, sukuria XPathNavigator iš dokumento ir sukompiliuoja XPath išraišką, kad pasirinktų visus elementus po elementais. Tada jis įvertina išraišką ir kartoja rezultatus, išspausdindamas kiekvieno elemento vertę.

Pastaba: XPath naudojimas gali būti galingas ir lankstus būdas pasirinkti elementus ir atributus iš XML dokumento, tačiau jis taip pat gali būti sudėtingesnis nei kai kurie kiti mūsų aptarti metodai.

Išvada

Naudojant XmlDocument klasę suteikiamos visos DOM manipuliavimo galimybės, tačiau tai gali būti lėtesnė ir reikalaujanti daugiau atminties nei kiti metodai. „XmlReader“ klasė yra gera galimybė skaityti didelius XML failus, nes ji suteikia greitą, tik į priekį ir ne talpykloje saugomą srauto metodą. XDocument klasė suteikia paprastesnę ir glaustesnę sintaksę, tačiau ji gali būti ne tokia efektyvi kaip XmlReader. Be to, LINQ į XML ir XPath metodai suteikia galingas užklausų galimybes, leidžiančias išskirti konkrečius duomenis iš XML failo.