XML lasīšana C#
Ir vairāki veidi, kā lasīt XML failu C#, un katrai metodei ir savas priekšrocības un trūkumi, un izvēle ir atkarīga no projekta prasībām. Tālāk ir norādīti daži veidi, kā lasīt XML failu C#:
- Izmantojot XmlDocument
- Izmantojot XDocument
- Izmantojot XmlReader
- Izmantojot Xml, lai LINQ
- Izmantojot XPath
Šeit ir XML faila saturs, ko esmu izveidojis un izmantošu, lai demonstrētu nākamās metodes:
< ?xml versija = '1.0' kodējums = 'utf-8' ? >
< darbiniekiem >
< darbinieks >
< id > 1 id >
< nosaukums > Sems Bošs nosaukums >
< nodaļa > Mārketings nodaļa >
< algu > 50 000 algu >
darbinieks >
< darbinieks >
< id > 2 id >
< nosaukums > Džeina Do nosaukums >
< nodaļa > Finanses nodaļa >
< algu > 60 000 algu >
darbinieks >
< darbinieks >
< id > 3 id >
< nosaukums > Džeimss nosaukums >
< nodaļa > Cilvēku resursi nodaļa >
< algu > 70 000 algu >
darbinieks >
darbiniekiem >
1: izmantojot XmlDocument
Lai lasītu XML failu C#, varat izmantot klasi XmlDocument vai XDocument, kuras abas ir System.Xml nosaukumvietas daļa. XmlDocument klase nodrošina DOM (dokumenta objektu modeļa) pieeju XML lasīšanai, savukārt XDocument klase nodrošina LINQ (valodu integrētā vaicājuma) pieeju. Šeit ir piemērs, kas izmanto XmlDocument klasi, lai lasītu XML failu:
izmantojot sistēmu;
izmantojot System.Xml;
klases programma
{
statiskā tukšums Galvenā ( virkne [ ] args )
{
XmlDocument doc = jauns XmlDocument ( ) ;
doc.Ielādēt ( 'darbinieki.xml' ) ;
XmlNodeList mezgli = doc.DocumentElement.SelectNodes ( '/darbinieki/darbinieks' ) ;
katram ( XmlNode mezgls iekšā mezgli )
{
virkne id = node.SelectSingleNode ( 'id' ) .InnerText;
virknes nosaukums = mezgls.SelectSingleNode ( 'vārds' ) .InnerText;
virknes nodaļa = node.SelectSingleNode ( 'nodaļa' ) .InnerText;
virkne alga = mezgls.SelectSingleNode ( 'alga' ) .InnerText;
Console.WriteLine ( 'ID: {0}, vārds: {1}, nodaļa: {2}, alga: {3}' , id , nosaukums, nodaļa, alga ) ;
}
}
}
Šis kods izmanto XmlDocument klasi, lai ielādētu XML failu, un SelectNodes metodi, lai izgūtu darbinieku mezglu sarakstu. Pēc tam katram darbinieka mezglam tas izmanto SelectSingleNode metodi, lai izgūtu id, vārda, nodaļas un algas pakārtotā mezgla vērtības un parādītu tās, izmantojot Console.WriteLine:
2: XDocument izmantošana
Varat arī izmantot XDocument klasi, lai lasītu XML failu, izmantojot LINQ pieeju, un tālāk ir kods, kas ilustrē, kā to izdarīt:
izmantojot sistēmu;klases programma
{
statiskā tukšums Galvenā ( virkne [ ] args )
{
XDocument doc = XDocument.Load ( 'darbinieki.xml' ) ;
katram ( XElement elements iekšā doc.Pēcteči ( 'darbinieks' ) )
{
starpt id = int.Parsēt ( elements.Elements ( 'id' ) .Vērtība ) ;
virknes nosaukums = elements.Element ( 'vārds' ) .Vērtība;
stīgu nodaļa = elements.Elements ( 'nodaļa' ) .Vērtība;
int alga = int.Parse ( elements.Elements ( 'alga' ) .Vērtība ) ;
Console.WriteLine ( $ 'ID: {id}, vārds: {name}, nodaļa: {department}, alga: {alga}' ) ;
}
}
}
XML fails tiek ielādēts XDocument objektā, izmantojot metodi XDocument.Load. Pēc tam visi XML faila “darbinieka” elementi tiek izgūti, izmantojot paņēmienu Descendants. Katra elementa pakārtotajiem elementiem tiek piekļūts, izmantojot metodi Elements, un to vērtības tiek iegūtas, izmantojot rekvizītu Value. Visbeidzot, iegūtie dati tiek izdrukāti konsolē.
Ņemiet vērā, ka XDocument pieder System.Xml.Linq nosaukumvietai, tāpēc C# faila augšdaļā ir jāiekļauj tālāk norādītais.
3: XmlReader izmantošana
XmlReader ir ātrs un efektīvs veids, kā lasīt XML failu C#. Tas nolasa failu secīgi, kas nozīmē, ka vienlaikus tiek ielādēts tikai viens mezgls, padarot to ideāli piemērotu darbam ar lieliem XML failiem, kurus citādi būtu grūti apstrādāt atmiņā.
izmantojot sistēmu;izmantojot System.Xml;
klases programma
{
statiskā tukšums Galvenā ( virkne [ ] args )
{
izmantojot ( XmlReader lasītājs = XmlReader.Create ( 'darbinieki.xml' ) )
{
kamēr ( lasītājs.Lasi ( ) )
{
ja ( lasītājs.NodeType == XmlNodeType.Element && lasītājs.Vārds == 'darbinieks' )
{
Console.WriteLine ( 'ID:' + lasītājs.GetAttribute ( 'id' ) ) ;
lasītājs.ReadToDescendant ( 'vārds' ) ;
Console.WriteLine ( 'Vārds:' + lasītājs.ReadElementContentAsString ( ) ) ;
lasītājs.LasītNākamajamMāsai ( 'nodaļa' ) ;
Console.WriteLine ( 'Nodaļa: ' + lasītājs.ReadElementContentAsString ( ) ) ;
lasītājs.LasītNākamajamMāsai ( 'alga' ) ;
Console.WriteLine ( 'Alga:' + lasītājs.ReadElementContentAsString ( ) ) ;
}
}
}
}
}
Šajā piemērā mēs izmantojam XmlReader.Izveidojiet metodi, lai izveidotu XmlReader gadījumu un kā parametru nodotu XML faila ceļu. Pēc tam mēs izmantojam kamēr cilpu, lai izlasītu XML faila mezglu pēc mezgla, izmantojot XmlReader lasīšanas metodi.
Cilpas iekšpusē mēs vispirms pārbaudām, vai pašreizējais mezgls ir darbinieka elements, izmantojot XmlReader rekvizītus NodeType un Name. Ja tā, mēs izmantojam metodi GetAttribute, lai izgūtu id atribūta vērtību.
Tālāk mēs izmantojam metodi ReadToDescendant, lai pārvietotu lasītāju uz vārda elementu darbinieka elementā. Pēc tam nosaukuma elementa vērtību iegūst, izmantojot funkciju ReadElementContentAsString.
Tāpat mēs izmantojam metodi ReadToNextSibling, lai pārvietotu lasītāju uz nākamo brāļa elementu un iegūtu nodaļas un algas elementu vērtību.
Visbeidzot, mēs izmantojam bloku, lai nodrošinātu, ka XmlReader objekts tiek pareizi iznīcināts pēc XML faila lasīšanas:
4: XML uz LINQ
XML faila lasīšana, izmantojot LINQ uz XML C#, ir spēcīgs veids, kā piekļūt XML datiem un ar tiem manipulēt. LINQ to XML ir LINQ tehnoloģijas sastāvdaļa, kas nodrošina vienkāršu un efektīvu API darbam ar XML datiem.
izmantojot sistēmu;izmantojot System.Linq;
izmantojot System.Xml.Linq;
klases programma
{
statiskā tukšums Galvenā ( virkne [ ] args )
{
XDocument doc = XDocument.Load ( 'darbinieki.xml' ) ;
var darbinieki = no e iekšā doc.Pēcteči ( 'darbinieks' )
izvēlieties jauns
{
Id = e.Element ( 'id' ) .Vērtība,
Nosaukums = e.Elements ( 'vārds' ) .Vērtība,
Nodaļa = e.Element ( 'nodaļa' ) .Vērtība,
Alga = e.Elements ( 'alga' ) .Vērtība
} ;
katram ( var darbinieks iekšā darbiniekiem )
{
Console.WriteLine ( $ 'Id: {darbinieks.Id}, vārds: {darbinieks.Vārds}, nodaļa: {darbinieks.nodaļa}, alga: {darbinieks.alga}' ) ;
}
}
}
Šajā kodā mēs vispirms ielādējam XML failu, izmantojot XDocument.Load() metodi. Pēc tam mēs izmantojam LINQ uz XML, lai pieprasītu XML datus un atlasītu ID, nosaukumu, nodaļu un algas elementus katram darbinieka elementam. Mēs uzglabājam šos datus anonīmā veidā un pēc tam pārskatām rezultātus, lai drukātu darbinieku informāciju konsolē.
5: XPath izmantošana
XPath ir vaicājumu valoda, ko izmanto, lai pārvietotos pa XML dokumentu, lai atrastu konkrētus elementus, atribūtus un mezglus. Tas ir efektīvs līdzeklis informācijas meklēšanai un filtrēšanai XML dokumentā. C# mēs varam izmantot XPath valodu, lai lasītu un izvilktu datus no XML failiem.
izmantojot sistēmu;izmantojot System.Xml.XPath;
izmantojot System.Xml;
klases programma
{
statisks tukšums Galvenais ( stīga [ ] args )
{
XmlDocument doc = jauns XmlDocument ( ) ;
doc.Ielādēt ( 'darbinieki.xml' ) ;
// Izveidojiet XPathNavigator no dokumenta
XPathNavigator nav = doc.CreateNavigator ( ) ;
// Kompilējiet XPath izteiksmi
XPathExpression ekspr = nav.Kompilēt ( '/darbinieki/darbinieks/vārds' ) ;
// Novērtējiet izteiksmi un atkārtojiet rezultātus
XPathNodeIterator iterator = nav.Atlasiet ( ekspr ) ;
kamēr ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterators.Strāva.Vērtība ) ;
}
}
}
Šis kods ielādē failu “employees.xml”, izmantojot XmlDocument, no dokumenta izveido XPathNavigator un apkopo XPath izteiksmi, lai atlasītu visus
Piezīme: XPath izmantošana var būt spēcīgs un elastīgs veids, kā atlasīt elementus un atribūtus no XML dokumenta, taču tas var būt arī sarežģītāks nekā dažas citas metodes, par kurām mēs runājām.
Secinājums
Klases XmlDocument izmantošana nodrošina visas DOM manipulācijas iespējas, taču tā var būt lēnāka un ietilpīgāka nekā citas metodes. XmlReader klase ir laba iespēja lielu XML failu lasīšanai, jo tā nodrošina ātru, tikai uz priekšu un bez kešatmiņas straumēm balstītu pieeju. XDocument klase nodrošina vienkāršāku un kodolīgāku sintaksi, taču tā var nebūt tik efektīva kā XmlReader. Turklāt LINQ uz XML un XPath metodes nodrošina jaudīgas vaicāšanas iespējas, lai no XML faila iegūtu konkrētus datus.