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
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.