Hvordan lese XML i C#

Hvordan Lese Xml I C



Det mye brukte dataformatet for datadeling på internett er XML, da data kan lagres i det og utveksles mellom systemer på en fleksibel og brukervennlig måte. I C# er lesing av XML-filer en vanlig oppgave, og .NET-rammeverket gir ulike klasser og metoder for å analysere og lese XML-filer. Dette innlegget vil gå over bruken av.NET-rammeverket for å lese XML i C#.

Leser XML i C#

Det er flere måter å lese en XML-fil i C# og hver metode har sine fordeler og ulemper, og valget avhenger av kravene til prosjektet. Nedenfor er noen måter å lese en XML-fil i C#:

Her er innholdet i XML-filen som jeg har laget og som skal brukes til demonstrasjon i kommende metoder:







< ?xml versjon = '1.0' koding = 'utf-8' ? >
< ansatte >
< ansatt >
< id > 1 id >
< Navn > Sam bosh Navn >
< avdeling > Markedsføring avdeling >
< lønn > 50 000 lønn >
ansatt >
< ansatt >
< id > 2 id >
< Navn > Jane Doe Navn >
< avdeling > Finansiere avdeling >
< lønn > 60 000 lønn >
ansatt >
< ansatt >
< id > 3 id >
< Navn > James Navn >
< avdeling > Menneskelige ressurser avdeling >
< lønn > 70 000 lønn >
ansatt >
ansatte >

1: Bruke XmlDocument

For å lese en XML-fil i C#, kan du bruke XmlDocument-klassen eller XDocument-klassen, som begge er en del av System.Xml-navneområdet. XmlDocument-klassen gir en DOM (Document Object Model)-tilnærming for lesing av XML, mens XDocument-klassen gir en LINQ (Language-Integrated Query)-tilnærming. Her er et eksempel som bruker XmlDocument-klassen for å lese en XML-fil:



bruker System;
bruker System.Xml;

klasseprogram
{
statisk tomrom Main ( streng [ ] args )
{
XmlDocument doc = nytt XmlDocument ( ) ;
doc.Load ( 'employees.xml' ) ;

XmlNodeList-noder = doc.DocumentElement.SelectNodes ( '/ansatte/ansatt' ) ;

for hver ( XmlNode node i noder )
{
streng id = node.VelgSingleNode ( 'id' ) .InnerText;
strengnavn = node.SelectSingleNode ( 'Navn' ) .InnerText;
strengavdeling = node.SelectSingleNode ( 'avdeling' ) .InnerText;
streng lønn = node.SelectSingleNode ( 'lønn' ) .InnerText;
Console.WriteLine ( 'ID: {0}, Navn: {1}, Avdeling: {2}, Lønn: {3}' , id , navn, avdeling, lønn ) ;
}
}
}

Denne koden bruker XmlDocument-klassen for å laste XML-filen og SelectNodes-metoden for å hente en liste over ansattnoder. Deretter, for hver ansattnode, bruker den SelectSingleNode-metoden for å hente verdiene til id-, navn-, avdelings- og lønnsundernodene og viser dem ved hjelp av Console.WriteLine:







2: Bruke XDocument

Alternativt kan du også bruke XDocument-klassen til å lese en XML-fil ved hjelp av en LINQ-tilnærming, og nedenfor er koden som illustrerer hvordan du gjør det:

bruker System;

klasseprogram
{
statisk tomrom Main ( streng [ ] args )
{
XDocument doc = XDocument.Load ( 'employees.xml' ) ;

for hver ( XElement element i doc.Descendants ( 'ansatt' ) )
{
int id = int.Parse ( element.Element ( 'id' ) .Verdi ) ;
strengnavn = element.Element ( 'Navn' ) .Verdi;
strengavdeling = element.Element ( 'avdeling' ) .Verdi;
int lønn = int.Parse ( element.Element ( 'lønn' ) .Verdi ) ;
Console.WriteLine ( $ 'ID: {id}, Navn: {navn}, Avdeling: {avdeling}, Lønn: {lønn}' ) ;
}
}
}

XML-filen lastes inn i et XDocument-objekt ved å bruke XDocument.Load-metoden. XML-filens 'medarbeider'-elementer blir deretter alle hentet ved hjelp av Descendants-teknikken. For hvert element får de underordnede elementene tilgang til ved hjelp av Element-metoden, og verdiene deres trekkes ut ved å bruke egenskapen Value. Til slutt skrives de utpakkede dataene ut til konsollen.



Merk at XDocument tilhører System.Xml.Linq-navneområdet, så du må inkludere følgende ved hjelp av setningen øverst i C#-filen din

3: Bruke XmlReader

XmlReader er en rask og effektiv måte å lese en XML-fil i C#. Den leser filen sekvensielt, noe som betyr at den bare laster inn én node om gangen, noe som gjør den ideell for å jobbe med store XML-filer som ellers ville vært vanskelige å håndtere i minnet.

bruker System;
bruker System.Xml;

klasseprogram
{
statisk tomrom Main ( streng [ ] args )
{
ved hjelp av ( XmlReader reader = XmlReader.Create ( 'employees.xml' ) )
{
samtidig som ( leser.Les ( ) )
{
hvis ( reader.NodeType == XmlNodeType.Element && leser.Navn == 'ansatt' )
{
Console.WriteLine ( 'ID: ' + reader.GetAttribute ( 'id' ) ) ;
reader.ReadToDescendant ( 'Navn' ) ;
Console.WriteLine ( 'Navn: ' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextSibling ( 'avdeling' ) ;
Console.WriteLine ( 'Avdeling: ' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextSibling ( 'lønn' ) ;
Console.WriteLine ( 'Lønn:' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

I dette eksemplet bruker vi XmlReader.Create en metode for å lage en forekomst av XmlReader og sende XML-filbanen som en parameter. Vi bruker deretter en while-løkke for å lese gjennom XML-filen node for node ved å bruke Read-metoden til XmlReader.

Inne i loopen sjekker vi først om den nåværende noden er et ansattelement ved å bruke egenskapene NodeType og Name til XmlReader. I så fall bruker vi GetAttribute-metoden for å hente verdien av id-attributtet.

Deretter bruker vi ReadToDescendant-metoden for å flytte leseren til navneelementet inne i ansattelementet. Verdien av navneelementet oppnås deretter ved å bruke ReadElementContentAsString-funksjonen.

Tilsvarende bruker vi ReadToNextSibling-metoden for å flytte leseren til neste søskenelement og få verdien av avdelings- og lønnselementer.

Til slutt bruker vi å bruke blokk for å sikre at XmlReader-objektet blir riktig avhendet etter at vi har lest XML-filen:

4: XML til LINQ

Å lese en XML-fil ved å bruke LINQ til XML i C# er en kraftig måte å få tilgang til og manipulere XML-data på. LINQ til XML er en komponent i LINQ-teknologien som gir et enkelt og effektivt API for arbeid med XML-data.

bruker System;
bruker System.Linq;
bruker System.Xml.Linq;

klasseprogram
{
statisk tomrom Main ( streng [ ] args )
{
XDocument doc = XDocument.Load ( 'employees.xml' ) ;

var ansatte = fra e i doc.Descendants ( 'ansatt' )
plukke ut ny
{
Id = e.Element ( 'id' ) .Verdi,
Navn = e.Element ( 'Navn' ) .Verdi,
Avdeling = e.Element ( 'avdeling' ) .Verdi,
Lønn = e.Element ( 'lønn' ) .Verdi
} ;
for hver ( var ansatt i ansatte )
{
Console.WriteLine ( $ 'Id: {employee.Id}, Navn: {employee.Name}, Avdeling: {employee.Department}, Lønn: {employee.Salary}' ) ;
}
}
}

I denne koden laster vi først XML-filen ved å bruke XDocument.Load()-metoden. Deretter bruker vi LINQ til XML for å spørre XML-dataene og velge id, navn, avdeling og lønnselementer for hvert ansattelement. Vi lagrer disse dataene i en anonym type og går deretter gjennom resultatene for å skrive ut ansattinformasjonen til konsollen.

5: Bruker XPath

XPath er et spørringsspråk som brukes til å navigere gjennom et XML-dokument for å finne spesifikke elementer, attributter og noder. Det er et effektivt verktøy for informasjonssøk og filtrering i et XML-dokument. I C# kan vi bruke XPath-språket til å lese og trekke ut data fra XML-filer.

bruker System;
bruker System.Xml.XPath;
bruker System.Xml;

klasseprogram
{
statisk tomrom Main ( streng [ ] args )
{
XmlDocument doc = nytt XmlDocument ( ) ;
doc.Load ( 'employees.xml' ) ;

// Lag en XPathNavigator fra dokumentet
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Kompiler XPath-uttrykket
XPathExpression uttr = nav.Kompiler ( '/ansatte/medarbeider/navn' ) ;

// Vurder uttrykket og iterer gjennom resultatene
XPathNodeIterator iterator = nav.Select ( uttr ) ;
samtidig som ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterator.Current.Value ) ;
}
}
}

Denne koden laster 'employees.xml'-filen ved hjelp av et XmlDocument, oppretter en XPathNavigator fra dokumentet og kompilerer et XPath-uttrykk for å velge alle -elementene under -elementene. Deretter evaluerer den uttrykket og går gjennom resultatene, og skriver ut verdien til hvert -element.

Merk: bruk av XPath kan være en kraftig og fleksibel måte å velge elementer og attributter fra et XML-dokument på, men det kan også være mer komplekst enn noen av de andre metodene vi har diskutert.

Konklusjon

Bruk av XmlDocument-klassen gir fulle DOM-manipulasjonsmuligheter, men det kan være tregere og mer minnekrevende enn de andre metodene. XmlReader-klassen er et godt alternativ for å lese store XML-filer, ettersom den gir en rask, kun videresending og ikke-bufret strømbasert tilnærming. XDocument-klassen gir en enklere og mer konsis syntaks, men den er kanskje ikke like effektiv som XmlReader. I tillegg gir LINQ til XML- og XPath-metodene kraftige spørringsmuligheter for å trekke ut spesifikke data fra en XML-fil.