Kako brati XML v C#

Kako Brati Xml V C



Široko uporabljen format podatkov za internetno izmenjavo podatkov je XML, saj je podatke mogoče shraniti vanj in izmenjevati med sistemi na prilagodljiv in uporabniku prijazen način. V C# je branje datotek XML običajna naloga, ogrodje .NET pa ponuja različne razrede in metode za razčlenjevanje in branje datotek XML. Ta objava bo obravnavala uporabo ogrodja .NET za branje XML v C#.

Branje XML v C#

Obstaja več načinov za branje datoteke XML v C# in vsak način ima svoje prednosti in slabosti, izbira pa je odvisna od zahtev projekta. Spodaj je nekaj načinov branja datoteke XML v C#:

Tukaj je vsebina datoteke XML, ki sem jo ustvaril in jo bom uporabil za predstavitev pri prihajajočih metodah:







< ?xml različica = '1,0' kodiranje = 'utf-8' ? >
< zaposlenih >
< zaposleni >
< id > 1 id >
< ime > Sam boš ime >
< oddelek > Trženje oddelek >
< plača > 50000 plača >
zaposleni >
< zaposleni >
< id > 2 id >
< ime > Jane Doe ime >
< oddelek > Finance oddelek >
< plača > 60000 plača >
zaposleni >
< zaposleni >
< id > 3 id >
< ime > James ime >
< oddelek > Človeški viri oddelek >
< plača > 70000 plača >
zaposleni >
zaposlenih >

1: Uporaba XmlDocument

Za branje datoteke XML v C# lahko uporabite razred XmlDocument ali razred XDocument, oba sta del imenskega prostora System.Xml. Razred XmlDocument nudi pristop DOM (Document Object Model) za branje XML, medtem ko razred XDocument zagotavlja pristop LINQ (Language-Integrated Query). Tukaj je primer uporabe razreda XmlDocument za branje datoteke XML:



z uporabo sistema;
z uporabo System.Xml;

razredni program
{
statična praznina Main ( vrvica [ ] args )
{
XmlDocument doc = nov XmlDocument ( ) ;
dok.Naloži ( 'zaposleni.xml' ) ;

Vozlišča XmlNodeList = doc.DocumentElement.SelectNodes ( '/zaposleni/zaposleni' ) ;

za vsakogar ( Vozlišče XmlNode v vozlišča )
{
vrvica id = node.SelectSingleNode ( 'id' ) .InnerText;
ime niza = vozlišče.SelectSingleNode ( 'ime' ) .InnerText;
string department = node.SelectSingleNode ( 'oddelek' ) .InnerText;
string salary = node.SelectSingleNode ( 'plača' ) .InnerText;
Console.WriteLine ( 'ID: {0}, ime: {1}, oddelek: {2}, plača: {3}' , id , ime, oddelek, plača ) ;
}
}
}

Ta koda uporablja razred XmlDocument za nalaganje datoteke XML in metodo SelectNodes za pridobitev seznama vozlišč zaposlenih. Nato za vsako vozlišče zaposlenih uporabi metodo SelectSingleNode za pridobitev vrednosti podrejenih vozlišč id, imena, oddelka in plače ter jih prikaže z uporabo Console.WriteLine:







2: Uporaba XDocument

Lahko pa uporabite tudi razred XDocument za branje datoteke XML s pristopom LINQ, spodaj pa je koda, ki ponazarja, kako to storiti:

z uporabo sistema;

razredni program
{
statična praznina Main ( vrvica [ ] args )
{
XDocument doc = XDocument.Load ( 'zaposleni.xml' ) ;

za vsakogar ( Element XElement v doc.Potomci ( 'zaposleni' ) )
{
int id = int.Parse ( element.Element ( 'id' ) .Vrednost ) ;
ime niza = element.Element ( 'ime' ) .Vrednost;
string department = element.Element ( 'oddelek' ) .Vrednost;
int plača = int.Parse ( element.Element ( 'plača' ) .Vrednost ) ;
Console.WriteLine ( $ 'ID: {id}, ime: {ime}, oddelek: {oddelek}, plača: {plača}' ) ;
}
}
}

Datoteka XML se naloži v objekt XDocument z uporabo metode XDocument.Load. Vsi elementi »zaposlenega« datoteke XML se nato pridobijo s tehniko potomcev. Za vsak element se do njegovih podrejenih elementov dostopa z metodo Element, njihove vrednosti pa se ekstrahirajo z lastnostjo Vrednost. Končno se ekstrahirani podatki natisnejo na konzolo.



Upoštevajte, da XDocument pripada imenskemu prostoru System.Xml.Linq, zato morate na vrh datoteke C# vključiti naslednji stavek using

3: Uporaba XmlReaderja

XmlReader je hiter in učinkovit način za branje datoteke XML v C#. Datoteko prebere zaporedno, kar pomeni, da naloži samo eno vozlišče naenkrat, zaradi česar je idealen za delo z velikimi datotekami XML, ki bi jih sicer težko obdelali v pomnilniku.

z uporabo sistema;
z uporabo System.Xml;

razredni program
{
statična praznina Main ( vrvica [ ] args )
{
uporabo ( Bralnik XmlReader = XmlReader.Create ( 'zaposleni.xml' ) )
{
medtem ( bralec.Preberi ( ) )
{
če ( reader.NodeType == XmlNodeType.Element && bralec.Ime == 'zaposleni' )
{
Console.WriteLine ( 'ID:' + reader.GetAttribute ( 'id' ) ) ;
bralec.ReadToDescendant ( 'ime' ) ;
Console.WriteLine ( 'Ime:' + reader.ReadElementContentAsString ( ) ) ;
bralec.ReadToNextSibling ( 'oddelek' ) ;
Console.WriteLine ( 'Oddelek:' + reader.ReadElementContentAsString ( ) ) ;
bralec.ReadToNextSibling ( 'plača' ) ;
Console.WriteLine ( 'Plača:' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

V tem primeru uporabljamo metodo XmlReader.Create za ustvarjanje primerka XmlReader in posredovanje poti datoteke XML kot parameter. Nato uporabimo zanko while za branje datoteke XML vozlišče za vozliščem z uporabo metode Read programa XmlReader.

Znotraj zanke najprej preverimo, ali je trenutno vozlišče element zaposlenega z uporabo lastnosti NodeType in Name programa XmlReader. Če je tako, uporabimo metodo GetAttribute za pridobitev vrednosti atributa id.

Nato uporabimo metodo ReadToDescendant, da premaknemo bralnik na element name znotraj elementa zaposlenega. Vrednost elementa imena se nato pridobi z uporabo funkcije ReadElementContentAsString.

Podobno uporabljamo metodo ReadToNextSibling, da bralca premaknemo na naslednji sorodniški element in pridobimo vrednost elementov oddelka in plače.

Končno uporabimo using block, da zagotovimo, da je predmet XmlReader pravilno odstranjen, ko končamo z branjem datoteke XML:

4: XML v LINQ

Branje datoteke XML z uporabo LINQ to XML v C# je zmogljiv način za dostop do podatkov XML in ravnanje z njimi. LINQ to XML je komponenta tehnologije LINQ, ki zagotavlja preprost in učinkovit API za delo s podatki XML.

z uporabo sistema;
z uporabo System.Linq;
z uporabo System.Xml.Linq;

razredni program
{
statična praznina Main ( vrvica [ ] args )
{
XDocument doc = XDocument.Load ( 'zaposleni.xml' ) ;

var zaposlenih = od e v doc.Potomci ( 'zaposleni' )
izberite novo
{
Id = e.Element ( 'id' ) .Vrednost,
Ime = e.Element ( 'ime' ) .Vrednost,
Oddelek = e.Element ( 'oddelek' ) .Vrednost,
Plača = e.Element ( 'plača' ) .Vrednost
} ;
za vsakogar ( uslužbenec var v zaposlenih )
{
Console.WriteLine ( $ 'Id: {employee.Id}, ime: {employee.Name}, oddelek: {employee.Department}, plača: {employee.Salary}' ) ;
}
}
}

V tej kodi najprej naložimo datoteko XML z metodo XDocument.Load(). Nato uporabimo LINQ to XML za poizvedbo po podatkih XML in izberemo ID, ime, oddelek in elemente plače za vsak element zaposlenega. Te podatke shranimo v anonimni obliki in nato pregledamo rezultate, da podatke o zaposlenih natisnemo na konzolo.

5: Uporaba XPath

XPath je jezik poizvedb, ki se uporablja za krmarjenje po dokumentu XML za iskanje določenih elementov, atributov in vozlišč. Je učinkovito orodje za iskanje in filtriranje informacij v dokumentu XML. V C# lahko uporabljamo jezik XPath za branje in ekstrahiranje podatkov iz datotek XML.

z uporabo sistema;
z uporabo System.Xml.XPath;
z uporabo System.Xml;

razredni program
{
statična praznina Main ( vrvica [ ] args )
{
XmlDocument doc = nov XmlDocument ( ) ;
dok.Naloži ( 'zaposleni.xml' ) ;

// Iz dokumenta ustvarite XPathNavigator
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Prevedite izraz XPath
XPathExpression ekspr = nav.Compile ( '/zaposleni/zaposleni/ime' ) ;

// Ocenite izraz in ponovite rezultate
XPathNodeIterator iterator = nav.Select ( ekspr ) ;
medtem ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterator.Current.Value ) ;
}
}
}

Ta koda naloži datoteko »employees.xml« z uporabo XmlDocument, ustvari XPathNavigator iz dokumenta in prevede izraz XPath za izbiro vseh elementov pod elementi . Nato ovrednoti izraz in ponovi rezultate ter natisne vrednost vsakega elementa .

Opomba: uporaba XPath je lahko zmogljiv in prilagodljiv način za izbiro elementov in atributov iz dokumenta XML, lahko pa je tudi bolj zapletena kot nekatere druge metode, o katerih smo razpravljali.

Zaključek

Uporaba razreda XmlDocument zagotavlja popolne zmožnosti manipulacije DOM, vendar je lahko počasnejša in bolj pomnilniško intenzivna kot druge metode. Razred XmlReader je dobra možnost za branje velikih datotek XML, saj zagotavlja hiter, samo za naprej in nepredpomnjen pristop, ki temelji na toku. Razred XDocument zagotavlja enostavnejšo in bolj jedrnato sintakso, vendar morda ne bo tako zmogljiv kot XmlReader. Poleg tega metodi LINQ to XML in XPath nudita zmogljive zmožnosti poizvedovanja za ekstrahiranje določenih podatkov iz datoteke XML.