Kuinka lukea XML:ää C#:ssa

Kuinka Lukea Xml Aa C Ssa



Internettiedon jakamiseen yleisesti käytetty tietomuoto on XML, koska siihen voidaan tallentaa dataa ja vaihtaa järjestelmien välillä joustavasti ja käyttäjäystävällisesti. C#:ssa XML-tiedostojen lukeminen on yleinen tehtävä, ja .NET-kehys tarjoaa erilaisia ​​luokkia ja menetelmiä XML-tiedostojen jäsentämiseen ja lukemiseen. Tämä viesti käsittelee .NET-kehyksen käyttöä XML:n lukemiseen C#:ssa.

XML:n lukeminen C#:lla

On olemassa useita tapoja lukea XML-tiedosto C#-kielellä, ja jokaisella menetelmällä on etunsa ja haittansa, ja valinta riippuu projektin vaatimuksista. Alla on joitain tapoja lukea XML-tiedostoa C#:ssa:

Tässä on XML-tiedoston sisältö, jonka olen luonut ja jota käytetään esittelyyn tulevissa menetelmissä:







< ?xml versio = '1.0' koodaus = 'utf-8' ? >
< työntekijät >
< työntekijä >
< id > 1 id >
< nimi > Sam bosh nimi >
< osasto > Markkinointi osasto >
< palkkaa > 50 000 palkkaa >
työntekijä >
< työntekijä >
< id > 2 id >
< nimi > Jane Doe nimi >
< osasto > Rahoittaa osasto >
< palkkaa > 60 000 palkkaa >
työntekijä >
< työntekijä >
< id > 3 id >
< nimi > James nimi >
< osasto > henkilöstöhallinto osasto >
< palkkaa > 70 000 palkkaa >
työntekijä >
työntekijät >

1: XmlDocumentin käyttäminen

XML-tiedoston lukemiseen C#-kielellä voit käyttää XmlDocument- tai XDocument-luokkaa, jotka molemmat ovat osa System.Xml-nimiavaruutta. XmlDocument-luokka tarjoaa DOM (Document Object Model) -lähestymistavan XML:n lukemiseen, kun taas XDocument-luokka tarjoaa LINQ (Language-Integrated Query) -lähestymistavan. Tässä on esimerkki XmlDocument-luokan käyttämisestä XML-tiedoston lukemiseen:



käyttämällä järjestelmää;
käyttäen System.Xml;

luokan ohjelma
{
staattinen tyhjyys Pää ( merkkijono [ ] args )
{
XmlDocument doc = uusi XmlDocument ( ) ;
doc.Load ( 'työntekijät.xml' ) ;

XmlNodeList nodes = doc.DocumentElement.SelectNodes ( '/työntekijät/työntekijä' ) ;

jokaiselle ( XmlNode-solmu sisään solmut )
{
merkkijono id = solmu.SelectSingleNode ( 'id' ) .InnerText;
merkkijonon nimi = node.SelectSingleNode ( 'nimi' ) .InnerText;
merkkijono osasto = node.SelectSingleNode ( 'osasto' ) .InnerText;
merkkijono palkka = node.SelectSingleNode ( 'palkka' ) .InnerText;
Console.WriteLine ( 'Tunnus: {0}, Nimi: {1}, Osasto: {2}, Palkka: {3}' , id , nimi, osasto, palkka ) ;
}
}
}

Tämä koodi käyttää XmlDocument-luokkaa XML-tiedoston lataamiseen ja SelectNodes-menetelmää työntekijäsolmujen luettelon hakemiseen. Tämän jälkeen se hakee jokaisen työntekijäsolmun kohdalla SelectSingleNode-menetelmän avulla id-, nimi-, osasto- ja palkkalapsisolmujen arvot ja näyttää ne Console.WriteLine:n avulla:







2: XDocumentin käyttö

Vaihtoehtoisesti voit myös käyttää XDocument-luokkaa XML-tiedoston lukemiseen LINQ-lähestymistavalla, ja alla on koodi, joka havainnollistaa, kuinka se tehdään:

käyttämällä järjestelmää;

luokan ohjelma
{
staattinen tyhjyys Pää ( merkkijono [ ] args )
{
XDocument doc = XDocument.Load ( 'työntekijät.xml' ) ;

jokaiselle ( XElement-elementti sisään doc.Jälkeläiset ( 'työntekijä' ) )
{
int id = int.Parse ( elementti.Elementti ( 'id' ) .Arvo ) ;
merkkijonon nimi = elementti.Elementti ( 'nimi' ) .Arvo;
merkkijono osasto = element.Element ( 'osasto' ) .Arvo;
int palkka = int.Parse ( elementti.Elementti ( 'palkka' ) .Arvo ) ;
Console.WriteLine ( $ 'ID: {id}, nimi: {name}, osasto: {osasto}, palkka: {palkka}' ) ;
}
}
}

XML-tiedosto ladataan XDocument-objektiin käyttämällä XDocument.Load-menetelmää. XML-tiedoston 'työntekijä'-elementit haetaan sitten kaikki Descendants-tekniikalla. Jokaisen elementin alielementtejä käytetään Element-menetelmällä, ja niiden arvot poimitaan Arvo-ominaisuuden avulla. Lopuksi poimitut tiedot tulostetaan konsoliin.



Huomaa, että XDocument kuuluu System.Xml.Linq-nimiavaruuteen, joten sinun on sisällytettävä seuraava lauseke C#-tiedoston yläosaan.

3: XmlReaderin käyttäminen

XmlReader on nopea ja tehokas tapa lukea XML-tiedostoja C#-kielellä. Se lukee tiedoston peräkkäin, mikä tarkoittaa, että se lataa vain yhden solmun kerrallaan, mikä tekee siitä ihanteellisen sellaisten suurten XML-tiedostojen käsittelyyn, joita muuten olisi vaikea käsitellä muistissa.

käyttämällä järjestelmää;
käyttäen System.Xml;

luokan ohjelma
{
staattinen tyhjyys Pää ( merkkijono [ ] args )
{
käyttämällä ( XmlReader-lukija = XmlReader.Create ( 'työntekijät.xml' ) )
{
sillä aikaa ( lukija. Lue ( ) )
{
jos ( reader.NodeType == XmlNodeType.Element && lukija.Nimi == 'työntekijä' )
{
Console.WriteLine ( 'ID:' + Reader.GetAttribute ( 'id' ) ) ;
ReadToDescendant ( 'nimi' ) ;
Console.WriteLine ( 'Nimi:' + reader.ReadElementContentAsString ( ) ) ;
lukija.LueSeuraavalleSisarukselle ( 'osasto' ) ;
Console.WriteLine ( 'Osasto:' + reader.ReadElementContentAsString ( ) ) ;
lukija.LueSeuraavalleSisarukselle ( 'palkka' ) ;
Console.WriteLine ( 'Palkka:' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

Tässä esimerkissä käytämme XmlReader.Create-menetelmää, jolla luodaan XmlReaderin esiintymä ja välitetään XML-tiedostopolku parametrina. Käytämme sitten while-silmukkaa lukeaksemme XML-tiedoston solmu kerrallaan XmlReaderin Read-menetelmällä.

Silmukan sisällä tarkistamme ensin, onko nykyinen solmu työntekijäelementti käyttämällä XmlReaderin NodeType- ja Name-ominaisuuksia. Jos näin on, käytämme GetAttribute-menetelmää id-attribuutin arvon hakemiseen.

Seuraavaksi käytämme ReadToDescendant-menetelmää lukijan siirtämiseen työntekijäelementin sisällä olevaan nimielementtiin. Nimielementin arvo saadaan sitten käyttämällä ReadElementContentAsString-funktiota.

Vastaavasti käytämme ReadToNextSibling-menetelmää siirtämään lukija seuraavaan sisaruselementtiin ja saamaan osasto- ja palkkaelementtien arvon.

Lopuksi käytämme lohkoa varmistaaksemme, että XmlReader-objekti hävitetään oikein, kun olemme lopettaneet XML-tiedoston lukemisen:

4: XML LINQ:ksi

XML-tiedoston lukeminen LINQ:sta XML:ksi C#:ssa on tehokas tapa käyttää ja käsitellä XML-tietoja. LINQ to XML on osa LINQ-teknologiaa, joka tarjoaa yksinkertaisen ja tehokkaan API:n XML-tietojen käsittelyyn.

käyttämällä järjestelmää;
käyttäen System.Linq;
käyttäen System.Xml.Linq;

luokan ohjelma
{
staattinen tyhjyys Pää ( merkkijono [ ] args )
{
XDocument doc = XDocument.Load ( 'työntekijät.xml' ) ;

var työntekijät = alkaen e sisään doc.Jälkeläiset ( 'työntekijä' )
valitse Uusi
{
Id = e.Element ( 'id' ) .Arvo,
Nimi = e.Elementti ( 'nimi' ) .Arvo,
Osasto = e.Element ( 'osasto' ) .Arvo,
Palkka = e.Elementti ( 'palkka' ) .Arvo
} ;
jokaiselle ( var työntekijä sisään työntekijät )
{
Console.WriteLine ( $ 'Id: {employee.Id}, Nimi: {employee.Name}, Osasto: {työntekijä.Osasto}, Palkka: {työntekijä.Palkka}' ) ;
}
}
}

Tässä koodissa lataamme ensin XML-tiedoston käyttämällä XDocument.Load()-menetelmää. Sen jälkeen käytämme LINQ to XML:ää XML-tietojen kyselyyn ja valitsemme kunkin työntekijäelementin tunnuksen, nimen, osaston ja palkkaelementit. Tallennamme nämä tiedot nimettömänä ja käymme sitten läpi tulokset tulostaaksemme työntekijän tiedot konsoliin.

5: XPathin käyttö

XPath on kyselykieli, jota käytetään XML-dokumentissa liikkumiseen tiettyjen elementtien, määritteiden ja solmujen löytämiseksi. Se on tehokas työkalu tiedonhakuun ja suodatukseen XML-dokumentista. C#:ssa voimme käyttää XPath-kieltä tietojen lukemiseen ja poimimiseen XML-tiedostoista.

käyttämällä järjestelmää;
käyttäen System.Xml.XPath;
käyttäen System.Xml;

luokan ohjelma
{
staattinen tyhjyys Pää ( merkkijono [ ] args )
{
XmlDocument doc = uusi XmlDocument ( ) ;
doc.Load ( 'työntekijät.xml' ) ;

// Luo XPathNavigator asiakirjasta
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Käännä XPath-lauseke
XPathExpression expr = nav.Compile ( '/työntekijät/työntekijä/nimi' ) ;

// Arvioi lauseke ja iteroi tulosten läpi
XPathNodeIterator iterator = nav.Valitse ( expr ) ;
sillä aikaa ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterator.Current.Value ) ;
}
}
}

Tämä koodi lataa 'employees.xml'-tiedoston XmlDocumentin avulla, luo XPathNavigatorin asiakirjasta ja kokoaa XPath-lausekkeen valitakseen kaikki -elementit -elementtien alla. Sitten se arvioi lausekkeen ja iteroi tulosten läpi tulostaen jokaisen -elementin arvon.

Huomautus: XPathin käyttö voi olla tehokas ja joustava tapa valita elementtejä ja attribuutteja XML-dokumentista, mutta se voi myös olla monimutkaisempi kuin jotkin muut käsittelemämme menetelmät.

Johtopäätös

XmlDocument-luokan käyttäminen tarjoaa täydelliset DOM-käsittelyominaisuudet, mutta se voi olla hitaampaa ja enemmän muistia kuin muut menetelmät. XmlReader-luokka on hyvä vaihtoehto suurten XML-tiedostojen lukemiseen, koska se tarjoaa nopean, vain eteenpäin suuntautuvan ja välimuistittoman suoratoistopohjaisen lähestymistavan. XDocument-luokka tarjoaa yksinkertaisemman ja tiiviimmän syntaksin, mutta se ei välttämättä ole yhtä tehokas kuin XmlReader. Lisäksi LINQ-XML- ja XPath-menetelmät tarjoavat tehokkaat kyselyominaisuudet tiettyjen tietojen poimimiseksi XML-tiedostosta.