Cum să citiți XML în C#

Cum Sa Cititi Xml In C



Formatul de date utilizat pe scară largă pentru partajarea datelor pe internet este XML, deoarece datele pot fi stocate în acesta și schimbate între sisteme într-un mod flexibil și ușor de utilizat. În C#, citirea fișierelor XML este o sarcină comună, iar cadrul .NET oferă diferite clase și metode pentru analizarea și citirea fișierelor XML. Această postare va trece peste utilizarea cadrului .NET pentru a citi XML în C#.

Citirea XML în C#

Există mai multe moduri de a citi un fișier XML în C# și fiecare metodă are avantajele și dezavantajele ei, iar alegerea depinde de cerințele proiectului. Mai jos sunt câteva modalități de a citi un fișier XML în C#:

Iată conținutul fișierului XML pe care l-am creat și va fi folosit pentru demonstrație în metodele viitoare:







< ?xml versiune = „1.0” codificare = 'utf-8' ? >
< angajati >
< angajat >
< id > 1 id >
< Nume > Sam bosh Nume >
< departament > Marketing departament >
< salariu > 50000 salariu >
angajat >
< angajat >
< id > 2 id >
< Nume > femeie necunoscută Nume >
< departament > Finanţa departament >
< salariu > 60000 salariu >
angajat >
< angajat >
< id > 3 id >
< Nume > James Nume >
< departament > Resurse umane departament >
< salariu > 70000 salariu >
angajat >
angajati >

1: Folosind XmlDocument

Pentru a citi un fișier XML în C#, puteți utiliza clasa XmlDocument sau clasa XDocument, ambele fac parte din spațiul de nume System.Xml. Clasa XmlDocument oferă o abordare DOM (Document Object Model) pentru citirea XML, în timp ce clasa XDocument oferă o abordare LINQ (Language-Integrated Query). Iată un exemplu de utilizare a clasei XmlDocument pentru a citi un fișier XML:



folosind System;
folosind System.Xml;

Programul clasei
{
gol static Principal ( şir [ ] argumente )
{
XmlDocument doc = document XmlDocument nou ( ) ;
doc.Încărcare ( „angajați.xml” ) ;

XmlNodeList nodes = doc.DocumentElement.SelectNodes ( „/angajați/angajat” ) ;

pentru fiecare ( Nodul XmlNode în noduri )
{
şir id = nod.SelectSingleNode ( 'id' ) .InnerText;
nume șir = node.SelectSingleNode ( 'Nume' ) .InnerText;
departament șir = node.SelectSingleNode ( 'departament' ) .InnerText;
string salariu = node.SelectSingleNode ( 'salariu' ) .InnerText;
Consolă.WriteLine ( „ID: {0}, Nume: {1}, Departament: {2}, Salariu: {3}” , id , nume, departament, salariu ) ;
}
}
}

Acest cod folosește clasa XmlDocument pentru a încărca fișierul XML și metoda SelectNodes pentru a prelua o listă de noduri de angajați. Apoi, pentru fiecare nod angajat, folosește metoda SelectSingleNode pentru a prelua valorile nodurilor id, nume, departament și salariu și le afișează folosind Console.WriteLine:







2: Folosind XDocument

Alternativ, puteți utiliza și clasa XDocument pentru a citi un fișier XML folosind o abordare LINQ, iar mai jos este codul care ilustrează cum să faceți acest lucru:

folosind System;

Programul clasei
{
gol static Principal ( şir [ ] argumente )
{
XDocument doc = XDocument.Load ( „angajați.xml” ) ;

pentru fiecare ( Elementul XElement în doc.Descendenţii ( 'angajat' ) )
{
int id = int.Parse ( element.Element ( 'id' ) .Valoare ) ;
nume șir = element.Element ( 'Nume' ) .Valoare;
departament șir = element.Element ( 'departament' ) .Valoare;
int salariu = int.Parse ( element.Element ( 'salariu' ) .Valoare ) ;
Consolă.WriteLine ( $ „ID: {id}, nume: {nume}, departament: {departament}, salariu: {salariu}” ) ;
}
}
}

Fișierul XML este încărcat într-un obiect XDocument folosind metoda XDocument.Load. Elementele „angajați” ale fișierului XML sunt apoi recuperate folosind tehnica Descendants. Pentru fiecare element, elementele sale secundare sunt accesate folosind metoda Element, iar valorile lor sunt extrase folosind proprietatea Value. În cele din urmă, datele extrase sunt tipărite pe consolă.



Rețineți că XDocument aparține spațiului de nume System.Xml.Linq, așa că trebuie să includeți următoarea declarație using în partea de sus a fișierului dvs. C#

3: Folosind XmlReader

XmlReader este o modalitate rapidă și eficientă de a citi un fișier XML în C#. Citește fișierul secvențial, ceea ce înseamnă că încarcă doar un nod la un moment dat, ceea ce îl face ideal pentru lucrul cu fișiere XML mari, care altfel ar fi dificil de gestionat în memorie.

folosind System;
folosind System.Xml;

Programul clasei
{
gol static Principal ( şir [ ] argumente )
{
folosind ( XmlReader reader = XmlReader.Create ( „angajați.xml” ) )
{
in timp ce ( cititor.Citeşte ( ) )
{
dacă ( reader.NodeType == XmlNodeType.Element && cititor.Nume == 'angajat' )
{
Consolă.WriteLine ( 'ID:' + reader.GetAttribute ( 'id' ) ) ;
cititor.ReadToDescendant ( 'Nume' ) ;
Consolă.WriteLine ( 'Nume: ' + reader.ReadElementContentAsString ( ) ) ;
cititor.ReadToNextFrate ( 'departament' ) ;
Consolă.WriteLine ( 'Departament:' + reader.ReadElementContentAsString ( ) ) ;
cititor.ReadToNextFrate ( 'salariu' ) ;
Consolă.WriteLine ( 'Salariu:' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

În acest exemplu, folosim XmlReader.Create o metodă pentru a crea o instanță a XmlReader și a trece calea fișierului XML ca parametru. Apoi folosim o buclă while pentru a citi fișierul XML nod cu nod folosind metoda Read a XmlReader.

În interiorul buclei, verificăm mai întâi dacă nodul curent este un element angajat folosind proprietățile NodeType și Name ale XmlReader. Dacă da, folosim metoda GetAttribute pentru a prelua valoarea atributului id.

Apoi, folosim metoda ReadToDescendant pentru a muta cititorul la elementul nume din interiorul elementului angajat. Valoarea elementului de nume este apoi obținută prin utilizarea funcției ReadElementContentAsString.

În mod similar, folosim metoda ReadToNextSibling pentru a muta cititorul la următorul element frate și pentru a obține valoarea elementelor de departament și salariu.

În cele din urmă, folosim blocul pentru a ne asigura că obiectul XmlReader este eliminat corect după ce terminăm de citit fișierul XML:

4: XML către LINQ

Citirea unui fișier XML folosind LINQ to XML în C# este o modalitate puternică de a accesa și de a manipula datele XML. LINQ to XML este o componentă a tehnologiei LINQ care oferă un API simplu și eficient pentru lucrul cu date XML.

folosind System;
folosind System.Linq;
folosind System.Xml.Linq;

Programul clasei
{
gol static Principal ( şir [ ] argumente )
{
XDocument doc = XDocument.Load ( „angajați.xml” ) ;

var salariati = din e în doc.Descendenţii ( 'angajat' )
Selectați nou
{
Id = e.Element ( 'id' ) .Valoare,
Nume = e.Element ( 'Nume' ) .Valoare,
Departament = e.Element ( 'departament' ) .Valoare,
Salariu = e.Element ( 'salariu' ) .Valoare
} ;
pentru fiecare ( var angajat în angajati )
{
Consolă.WriteLine ( $ „Id: {employee.Id}, Nume: {employee.Name}, Departament: {employee.Department}, Salariu: {employee.Salary}” ) ;
}
}
}

În acest cod, încărcăm mai întâi fișierul XML folosind metoda XDocument.Load(). Apoi, folosim LINQ to XML pentru a interoga datele XML și pentru a selecta id-ul, numele, departamentul și elementele de salariu pentru fiecare element de angajat. Stocăm aceste date într-un tip anonim și apoi parcurgem rezultatele pentru a imprima informațiile angajaților pe consolă.

5: Folosind XPath

XPath este un limbaj de interogare care este folosit pentru a naviga printr-un document XML pentru a localiza anumite elemente, atribute și noduri. Este un instrument eficient pentru căutarea și filtrarea informațiilor într-un document XML. În C#, putem folosi limbajul XPath pentru a citi și extrage date din fișierele XML.

folosind System;
folosind System.Xml.XPath;
folosind System.Xml;

Programul clasei
{
gol static Principal ( şir [ ] argumente )
{
XmlDocument doc = document XmlDocument nou ( ) ;
doc.Încărcare ( „angajați.xml” ) ;

// Creați un XPathNavigator din document
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Compilați expresia XPath
XPathExpression expr = nav.Compilare ( „/angajați/angajat/nume” ) ;

// Evaluați expresia și repetați rezultatele
XPathNodeIterator iterator = nav.Select ( expr ) ;
in timp ce ( iterator.MoveNext ( ) )
{
Consolă.WriteLine ( iterator.Valoare.Actuală ) ;
}
}
}

Acest cod încarcă fișierul „employees.xml” folosind un XmlDocument, creează un XPathNavigator din document și compilează o expresie XPath pentru a selecta toate elementele din elementele . Apoi evaluează expresia și iterează rezultatele, imprimând valoarea fiecărui element .

Notă: utilizarea XPath poate fi o modalitate puternică și flexibilă de a selecta elemente și atribute dintr-un document XML, dar poate fi și mai complexă decât unele dintre celelalte metode pe care le-am discutat.

Concluzie

Utilizarea clasei XmlDocument oferă capabilități complete de manipulare DOM, dar poate fi mai lentă și mai consumatoare de memorie decât celelalte metode. Clasa XmlReader este o opțiune bună pentru citirea fișierelor XML mari, deoarece oferă o abordare bazată pe flux rapid, numai înainte și fără cache. Clasa XDocument oferă o sintaxă mai simplă și mai concisă, dar este posibil să nu fie la fel de performantă ca XmlReader. În plus, metodele LINQ to XML și XPath oferă capabilități puternice de interogare pentru a extrage date specifice dintr-un fișier XML.