Kuidas lugeda XML-i C#-s

Kuidas Lugeda Xml I C S



Interneti-andmete jagamisel laialdaselt kasutatav andmevorming on XML, kuna selles saab andmeid salvestada ja süsteemide vahel paindlikult ja kasutajasõbralikult vahetada. C#-s on XML-failide lugemine tavaline ülesanne ning .NET-i raamistik pakub erinevaid klasse ja meetodeid XML-failide sõelumiseks ja lugemiseks. See postitus käsitleb .NET raamistiku kasutamist XML-i lugemiseks C#-s.

XML-i lugemine C#-s

XML-faili lugemiseks C#-s on mitu võimalust ning igal meetodil on oma eelised ja puudused ning valik sõltub projekti nõuetest. Allpool on toodud mõned viisid XML-faili lugemiseks C#-s:

Siin on minu loodud ja tulevaste meetodite demonstreerimiseks kasutatava XML-faili sisu:







< ?xml versioon = '1.0' kodeering = 'utf-8' ? >
< töötajad >
< töötaja >
< id > 1 id >
< nimi > Sam bosh nimi >
< osakond > Turundus osakond >
< palk > 50 000 palk >
töötaja >
< töötaja >
< id > 2 id >
< nimi > Jane Doe nimi >
< osakond > Rahandus osakond >
< palk > 60 000 palk >
töötaja >
< töötaja >
< id > 3 id >
< nimi > James nimi >
< osakond > Inimressursid osakond >
< palk > 70 000 palk >
töötaja >
töötajad >

1: XmlDocumenti kasutamine

XML-faili lugemiseks C#-s saate kasutada klassi XmlDocument või XDocument, mis mõlemad kuuluvad System.Xml nimeruumi. Klass XmlDocument pakub XML-i lugemiseks DOM-i (Document Object Model) lähenemisviisi, samas kui XDocument klass pakub LINQ-lähenemist (keelega integreeritud päring). Siin on näide XmlDocument klassi kasutamisest XML-faili lugemiseks:



süsteemi kasutamine;
kasutades System.Xml;

klassi programm
{
staatiline tühimik Peamine ( string [ ] args )
{
XmlDocument doc = uus XmlDocument ( ) ;
doc.Laadi ( 'töötajad.xml' ) ;

XmlNodeList nodes = doc.DocumentElement.SelectNodes ( '/töötajad/töötaja' ) ;

igaühele ( XmlNode sõlm sisse sõlmed )
{
string id = node.SelectSingleNode ( 'id' ) .InnerText;
stringi nimi = node.SelectSingleNode ( 'nimi' ) .InnerText;
stringi osakond = node.SelectSingleNode ( 'osakond' ) .InnerText;
string palk = node.SelectSingleNode ( 'palk' ) .InnerText;
Console.WriteLine ( 'ID: {0}, nimi: {1}, osakond: {2}, palk: {3}' , id , nimi, osakond, palk ) ;
}
}
}

See kood kasutab XML-faili laadimiseks klassi XmlDocument ja töötajate sõlmede loendi toomiseks meetodit SelectNodes. Seejärel kasutab see iga töötaja sõlme jaoks meetodit SelectSingleNode, et tuua välja ID, nime, osakonna ja palga alamsõlme väärtused ning kuvada need Console.WriteLine abil:







2: XDocumenti kasutamine

Teise võimalusena võite kasutada XML-faili lugemiseks LINQ-meetodit kasutades klassi XDocument ja allpool on kood, mis illustreerib, kuidas seda teha:

süsteemi kasutamine;

klassi programm
{
staatiline tühimik Peamine ( string [ ] args )
{
XDocument doc = XDocument.Load ( 'töötajad.xml' ) ;

igaühele ( XElement element sisse dok.Järeltulijad ( 'töötaja' ) )
{
int id = int.Parse ( element.Element ( 'id' ) .Väärtus ) ;
stringi nimi = element.Element ( 'nimi' ) .Väärtus;
stringi osakond = element.Element ( 'osakond' ) .Väärtus;
int palk = int.Parse ( element.Element ( 'palk' ) .Väärtus ) ;
Console.WriteLine ( $ 'ID: {id}, nimi: {nimi}, osakond: {osakond}, palk: {palk}' ) ;
}
}
}

XML-fail laaditakse XDocumenti objekti kasutades meetodit XDocument.Load. Seejärel hangitakse kõik XML-faili 'töötaja' elemendid, kasutades tehnikat Descendants. Iga elemendi alamelementidele pääseb juurde meetodi Element abil ja nende väärtused ekstraheeritakse atribuudi Value abil. Lõpuks prinditakse eraldatud andmed konsooli.



Pange tähele, et XDocument kuulub nimeruumi System.Xml.Linq, seega peate oma C#-faili ülaosas lisama järgmise lause.

3: XmlReaderi kasutamine

XmlReader on kiire ja tõhus viis XML-faili lugemiseks C#-s. See loeb faili järjestikku, mis tähendab, et see laadib korraga ainult ühe sõlme, mistõttu on see ideaalne suurte XML-failidega töötamiseks, mida muidu oleks mälus raske käsitleda.

süsteemi kasutamine;
kasutades System.Xml;

klassi programm
{
staatiline tühimik Peamine ( string [ ] args )
{
kasutades ( XmlReaderi lugeja = XmlReader.Create ( 'töötajad.xml' ) )
{
samal ajal ( lugeja.Loe ( ) )
{
kui ( reader.NodeType == XmlNodeType.Element && lugeja.Nimi == 'töötaja' )
{
Console.WriteLine ( 'ID:' + lugeja.GetAttribute ( 'id' ) ) ;
lugeja.ReadToDescendant ( 'nimi' ) ;
Console.WriteLine ( 'Nimi:' + reader.ReadElementContentAsString ( ) ) ;
lugeja.LoeJärgminevend ( 'osakond' ) ;
Console.WriteLine ( 'Osakond:' + reader.ReadElementContentAsString ( ) ) ;
lugeja.LoeJärgminevend ( 'palk' ) ;
Console.WriteLine ( 'Palk:' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

Selles näites kasutame XmlReader.Create meetodit XmlReaderi eksemplari loomiseks ja XML-faili tee parameetrina edastamiseks. Seejärel kasutame tsüklit, et lugeda XML-faili sõlmede kaupa läbi, kasutades XmlReaderi lugemismeetodit.

Silmuse sees kontrollime esmalt, kas praegune sõlm on töötaja element, kasutades XmlReaderi atribuute NodeType ja Name. Kui jah, kasutame atribuudi id väärtuse hankimiseks meetodit GetAttribute.

Järgmiseks kasutame meetodit ReadToDescendant, et viia lugeja töötaja elemendi sees olevale nimeelemendile. Nimeelemendi väärtus saadakse seejärel funktsiooni ReadElementContentAsString abil.

Samamoodi kasutame meetodit ReadToNextSibling, et viia lugeja järgmise õe-venna elemendi juurde ning saada osakonna- ja palgaelementide väärtus.

Lõpuks kasutame ploki kasutamist, et tagada XmlReaderi objekti õige kõrvaldamine pärast XML-faili lugemise lõpetamist:

4: XML-ist LINQ-ile

XML-faili lugemine, kasutades LINQ-i XML-i C#-vormingus, on võimas viis XML-andmetele juurde pääsemiseks ja nendega manipuleerimiseks. LINQ to XML on LINQ-tehnoloogia komponent, mis pakub lihtsat ja tõhusat API-d XML-andmetega töötamiseks.

süsteemi kasutamine;
kasutades System.Linq;
kasutades System.Xml.Linq;

klassi programm
{
staatiline tühimik Peamine ( string [ ] args )
{
XDocument doc = XDocument.Load ( 'töötajad.xml' ) ;

var töötajad = alates e sisse dok.Järeltulijad ( 'töötaja' )
vali uus
{
Id = e.Element ( 'id' ) .Väärtus,
Nimi = e.Element ( 'nimi' ) .Väärtus,
Osakond = e.Element ( 'osakond' ) .Väärtus,
Palk = e.Element ( 'palk' ) .Väärtus
} ;
igaühele ( var töötaja sisse töötajad )
{
Console.WriteLine ( $ 'Id: {töötaja.Id}, nimi: {töötaja.Nimi}, osakond: {töötaja.osakond}, palk: {töötaja.palk}' ) ;
}
}
}

Selles koodis laadime esmalt XML-faili, kasutades meetodit XDocument.Load(). Seejärel kasutame LINQ to XML-i XML-andmete päringu tegemiseks ja iga töötaja elemendi ID, nime, osakonna ja palga elemendi valimiseks. Salvestame need andmed anonüümsel kujul ja vaatame seejärel läbi tulemused, et printida konsooli töötaja teave.

5: XPathi kasutamine

XPath on päringukeel, mida kasutatakse XML-dokumendis navigeerimiseks konkreetsete elementide, atribuutide ja sõlmede leidmiseks. See on tõhus tööriist teabe otsimiseks ja filtreerimiseks XML-dokumendis. C#-s saame kasutada XPathi keelt XML-failide andmete lugemiseks ja eraldamiseks.

süsteemi kasutamine;
kasutades System.Xml.XPath;
kasutades System.Xml;

klassi programm
{
staatiline tühimik Peamine ( string [ ] args )
{
XmlDocument doc = uus XmlDocument ( ) ;
doc.Laadi ( 'töötajad.xml' ) ;

// Looge dokumendist XPathNavigator
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Kompileerige XPath avaldis
XPathExpression avald = nav.Koostage ( '/töötajad/töötaja/nimi' ) ;

// Hinnake väljendit ja korrake tulemusi
XPathNodeIterator iterator = nav.Valige ( avald ) ;
samas ( iteraator.MoveNext ( ) )
{
Console.WriteLine ( iteraator.Praegune.Väärtus ) ;
}
}
}

See kood laadib XmlDocumenti abil faili 'employees.xml', loob dokumendist XPathNavigaatori ja kompileerib XPathi avaldise, et valida kõik elementide elemendid elementide all. Seejärel hindab see avaldist ja kordab tulemusi, trükkides välja iga elemendi väärtuse.

Märge: XPathi kasutamine võib olla võimas ja paindlik viis elementide ja atribuutide valimiseks XML-dokumendist, kuid see võib olla ka keerulisem kui mõned muud meetodid, mida oleme arutanud.

Järeldus

Klassi XmlDocument kasutamine pakub täielikke DOM-i manipuleerimisvõimalusi, kuid see võib olla aeglasem ja mälumahukam kui teised meetodid. XmlReaderi klass on hea valik suurte XML-failide lugemiseks, kuna see pakub kiiret, ainult edasisuunamist ja vahemällu salvestamata voopõhist lähenemist. Klass XDocument pakub lihtsamat ja ülevaatlikumat süntaksit, kuid see ei pruugi olla nii tõhus kui XmlReader. Lisaks pakuvad meetodid LINQ to XML ja XPath võimsaid päringuvõimalusi konkreetsete andmete eraldamiseks XML-failist.