Sådan læser du XML i C#

Sadan Laeser Du Xml I C



Det meget brugte dataformat til internetdatadeling er XML, da data kan lagres i det og udveksles mellem systemer på en fleksibel og brugervenlig måde. I C# er læsning af XML-filer en almindelig opgave, og .NET frameworket giver forskellige klasser og metoder til at parse og læse XML-filer. Dette indlæg vil gå over at bruge.NET frameworket til at læse XML i C#.

Læser XML i C#

Der er flere måder at læse en XML-fil på i C# og hver metode har sine fordele og ulemper, og valget afhænger af projektets krav. Nedenfor er nogle måder at læse en XML-fil i C#:

Her er indholdet af XML-filen, som jeg har oprettet og vil blive brugt til demonstration i kommende metoder:







< ?xml version = '1.0' indkodning = 'utf-8' ? >
< medarbejdere >
< medarbejder >
< id > 1 id >
< navn > Sam bosh navn >
< afdeling > Markedsføring afdeling >
< løn > 50.000 løn >
medarbejder >
< medarbejder >
< id > 2 id >
< navn > Jane Doe navn >
< afdeling > Finansiere afdeling >
< løn > 60.000 løn >
medarbejder >
< medarbejder >
< id > 3 id >
< navn > James navn >
< afdeling > Menneskelige ressourcer afdeling >
< løn > 70.000 løn >
medarbejder >
medarbejdere >

1: Brug af XmlDocument

For at læse en XML-fil i C#, kan du bruge XmlDocument-klassen eller XDocument-klassen, som begge er en del af System.Xml-navnerummet. XmlDocument-klassen giver en DOM-tilgang (Document Object Model) til læsning af XML, mens XDocument-klassen giver en LINQ-tilgang (Language-Integrated Query). Her er et eksempel, der bruger XmlDocument-klassen til at læse en XML-fil:



bruger System;
ved hjælp af System.Xml;

klasses program
{
statisk tomrum Main ( snor [ ] args )
{
XmlDocument doc = nyt XmlDocument ( ) ;
doc.Load ( 'employees.xml' ) ;

XmlNodeList nodes = doc.DocumentElement.SelectNodes ( '/medarbejdere/medarbejder' ) ;

for hver ( XmlNode node i noder )
{
snor id = node.SelectSingleNode ( 'id' ) .IndreTekst;
strengnavn = node.SelectSingleNode ( 'navn' ) .IndreTekst;
streng afdeling = node.SelectSingleNode ( 'afdeling' ) .IndreTekst;
streng løn = node.SelectSingleNode ( 'løn' ) .IndreTekst;
Console.WriteLine ( 'ID: {0}, Navn: {1}, Afdeling: {2}, Løn: {3}' , id , navn, afdeling, løn ) ;
}
}
}

Denne kode bruger XmlDocument-klassen til at indlæse XML-filen og SelectNodes-metoden til at hente en liste over medarbejdernoder. Derefter, for hver medarbejderknude, bruger den SelectSingleNode-metoden til at hente værdierne for id, navn, afdeling og lønundernoder og viser dem ved hjælp af Console.WriteLine:







2: Brug af XDocument

Alternativt kan du også bruge XDocument-klassen til at læse en XML-fil ved hjælp af en LINQ-tilgang, og nedenfor er koden, der illustrerer, hvordan man gør det:

bruger System;

klasses program
{
statisk tomrum Main ( snor [ ] args )
{
XDocument doc = XDocument.Load ( 'employees.xml' ) ;

for hver ( XElement element i doc.Descendants ( 'medarbejder' ) )
{
int id = int.Parse ( element.Element ( 'id' ) .Værdi ) ;
strengnavn = element.Element ( 'navn' ) .Værdi;
strengafdeling = element.Element ( 'afdeling' ) .Værdi;
int løn = int.Parse ( element.Element ( 'løn' ) .Værdi ) ;
Console.WriteLine ( $ 'ID: {id}, Navn: {navn}, Afdeling: {afdeling}, Løn: {løn}' ) ;
}
}
}

XML-filen indlæses i et XDocument-objekt ved hjælp af XDocument.Load-metoden. XML-filens 'medarbejder'-elementer hentes derefter alle ved hjælp af Descendants-teknikken. For hvert element tilgås dets underordnede elementer ved hjælp af Element-metoden, og deres værdier udtrækkes ved hjælp af egenskaben Værdi. Til sidst udskrives de udtrukne data til konsollen.



Bemærk, at XDocument tilhører System.Xml.Linq-navneområdet, så du skal inkludere følgende ved hjælp af sætning øverst i din C#-fil

3: Brug af XmlReader

XmlReader er en hurtig og effektiv måde at læse en XML-fil i C#. Den læser filen sekventielt, hvilket betyder, at den kun indlæser én node ad gangen, hvilket gør den ideel til at arbejde med store XML-filer, som ellers ville være svære at håndtere i hukommelsen.

bruger System;
ved hjælp af System.Xml;

klasses program
{
statisk tomrum Main ( snor [ ] args )
{
ved brug af ( XmlReader reader = XmlReader.Create ( 'employees.xml' ) )
{
mens ( læser.Læs ( ) )
{
hvis ( reader.NodeType == XmlNodeType.Element && læser.Navn == 'medarbejder' )
{
Console.WriteLine ( 'ID: ' + reader.GetAttribute ( 'id' ) ) ;
reader.ReadToDescendant ( 'navn' ) ;
Console.WriteLine ( 'Navn: ' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextSibling ( 'afdeling' ) ;
Console.WriteLine ( 'Afdeling:' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextSibling ( 'løn' ) ;
Console.WriteLine ( 'Løn:' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

I dette eksempel bruger vi XmlReader.Create en metode til at oprette en instans af XmlReader og videregive XML-filstien som en parameter. Vi bruger derefter en while-løkke til at læse XML-filen node for node ved hjælp af Read-metoden fra XmlReader.

Inde i løkken tjekker vi først, om den aktuelle node er et medarbejderelement ved hjælp af egenskaberne NodeType og Name i XmlReader. Hvis det er tilfældet, bruger vi GetAttribute-metoden til at hente id-attributtens værdi.

Dernæst bruger vi ReadToDescendant-metoden til at flytte læseren til navneelementet inde i medarbejderelementet. Værdien af ​​navneelementet opnås derefter ved at bruge funktionen ReadElementContentAsString.

På samme måde bruger vi ReadToNextSibling-metoden til at flytte læseren til næste søskendeelement og få værdien af ​​afdelings- og lønelementer.

Endelig bruger vi at bruge blok for at sikre, at XmlReader-objektet er korrekt bortskaffet, efter at vi er færdige med at læse XML-filen:

4: XML til LINQ

At læse en XML-fil ved hjælp af LINQ til XML i C# er en effektiv måde at få adgang til og manipulere XML-data på. LINQ til XML er en komponent i LINQ-teknologien, der giver en enkel og effektiv API til at arbejde med XML-data.

bruger System;
ved hjælp af System.Linq;
ved hjælp af System.Xml.Linq;

klasses program
{
statisk tomrum Main ( snor [ ] args )
{
XDocument doc = XDocument.Load ( 'employees.xml' ) ;

var ansatte = fra e i doc.Descendants ( 'medarbejder' )
Vælg ny
{
Id = e.Element ( 'id' ) .Værdi,
Navn = e.Element ( 'navn' ) .Værdi,
Afdeling = e.Element ( 'afdeling' ) .Værdi,
Løn = e.Element ( 'løn' ) .Værdi
} ;
for hver ( var medarbejder i medarbejdere )
{
Console.WriteLine ( $ 'Id: {employee.Id}, Navn: {employee.Name}, Afdeling: {employee.Department}, Løn: {employee.Salary}' ) ;
}
}
}

I denne kode indlæser vi først XML-filen ved hjælp af XDocument.Load()-metoden. Derefter bruger vi LINQ til XML til at forespørge XML-dataene og vælge id, navn, afdeling og lønelementer for hvert medarbejderelement. Vi gemmer disse data i en anonym type og går derefter gennem resultaterne for at udskrive medarbejderoplysningerne til konsollen.

5: Brug af XPath

XPath er et forespørgselssprog, der bruges til at navigere gennem et XML-dokument for at finde specifikke elementer, attributter og noder. Det er et effektivt værktøj til informationssøgning og -filtrering i et XML-dokument. I C# kan vi bruge XPath-sproget til at læse og udtrække data fra XML-filer.

bruger System;
ved hjælp af System.Xml.XPath;
ved hjælp af System.Xml;

klasses program
{
statisk tomrum Main ( snor [ ] args )
{
XmlDocument doc = nyt XmlDocument ( ) ;
doc.Load ( 'employees.xml' ) ;

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

// Kompiler XPath-udtrykket
XPathExpression udtr = nav.Kompilér ( '/medarbejdere/medarbejder/navn' ) ;

// Vurder udtrykket og gentag resultaterne
XPathNodeIterator iterator = nav.Vælg ( udtr ) ;
mens ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterator.Nuværende.Værdi ) ;
}
}
}

Denne kode indlæser filen 'employees.xml' ved hjælp af et XmlDocument, opretter en XPathNavigator fra dokumentet og kompilerer et XPath-udtryk for at vælge alle -elementerne under -elementerne. Den evaluerer derefter udtrykket og gentager resultaterne og udskriver værdien af ​​hvert -element.

Bemærk: Brug af XPath kan være en kraftfuld og fleksibel måde at vælge elementer og attributter fra et XML-dokument på, men det kan også være mere komplekst end nogle af de andre metoder, vi har diskuteret.

Konklusion

Brug af XmlDocument-klassen giver fuld DOM-manipulationskapacitet, men den kan være langsommere og mere hukommelsesintensiv end de andre metoder. XmlReader-klassen er en god mulighed for at læse store XML-filer, da den giver en hurtig, kun fremadrettet og ikke-cache-stream-baseret tilgang. XDocument-klassen giver en enklere og mere kortfattet syntaks, men den er muligvis ikke så effektiv som XmlReader. Derudover giver LINQ til XML- og XPath-metoderne kraftfulde forespørgselsfunktioner til at udtrække specifikke data fra en XML-fil.