Ako čítať XML v C#

Ako Citat Xml V C



Široko používaným formátom údajov na zdieľanie údajov na internete je XML, pretože v ňom možno údaje ukladať a vymieňať medzi systémami flexibilným a užívateľsky prívetivým spôsobom. V C# je čítanie súborov XML bežnou úlohou a rámec .NET poskytuje rôzne triedy a metódy na analýzu a čítanie súborov XML. Tento príspevok sa bude zaoberať využitím rámca .NET na čítanie XML v C#.

Čítanie XML v C#

Existuje niekoľko spôsobov čítania súboru XML v C# a každý spôsob má svoje výhody a nevýhody a výber závisí od požiadaviek projektu. Nižšie je uvedených niekoľko spôsobov, ako čítať súbor XML v jazyku C#:

Tu je obsah súboru XML, ktorý som vytvoril a ktorý bude použitý na demonštráciu v nadchádzajúcich metódach:







< ?xml verzia = '1,0' kódovanie = 'utf-8' ? >
< zamestnancov >
< zamestnanca >
< id > 1 id >
< názov > Sam bosh názov >
< oddelenie > marketing oddelenie >
< plat > 50 000 plat >
zamestnanca >
< zamestnanca >
< id > 2 id >
< názov > Jane Doe názov >
< oddelenie > Financie oddelenie >
< plat > 60 000 plat >
zamestnanca >
< zamestnanca >
< id > 3 id >
< názov > James názov >
< oddelenie > Ľudské zdroje oddelenie >
< plat > 70 000 plat >
zamestnanca >
zamestnancov >

1: Použitie XmlDocument

Na čítanie súboru XML v C# môžete použiť triedu XmlDocument alebo XDocument, pričom obe sú súčasťou priestoru názvov System.Xml. Trieda XmlDocument poskytuje prístup DOM (Document Object Model) na čítanie XML, zatiaľ čo trieda XDocument poskytuje prístup LINQ (Language-Integrated Query). Tu je príklad použitia triedy XmlDocument na čítanie súboru XML:



pomocou systému;
pomocou System.Xml;

triedny program
{
static void Main ( reťazec [ ] args )
{
XmlDocument doc = nový XmlDocument ( ) ;
doc.Načítať ( 'employees.xml' ) ;

Uzly XmlNodeList = doc.DocumentElement.SelectNodes ( '/employees/employee' ) ;

pre každý ( Uzol XmlNode v uzly )
{
reťazec id = node.SelectSingleNode ( 'id' ) .InnerText;
string name = node.SelectSingleNode ( 'názov' ) .InnerText;
string department = node.SelectSingleNode ( 'oddelenie' ) .InnerText;
string plat = uzol.SelectSingleNode ( 'plat' ) .InnerText;
Console.WriteLine ( 'ID: {0}, meno: {1}, oddelenie: {2}, plat: {3}' , id , meno, oddelenie, plat ) ;
}
}
}

Tento kód používa triedu XmlDocument na načítanie súboru XML a metódu SelectNodes na získanie zoznamu uzlov zamestnancov. Potom pre každý zamestnanecký uzol použije metódu SelectSingleNode na získanie hodnôt id, mena, oddelenia a platových podriadených uzlov a zobrazí ich pomocou Console.WriteLine:







2: Použitie XDocument

Prípadne môžete použiť triedu XDocument na čítanie súboru XML pomocou prístupu LINQ a nižšie je kód, ktorý ilustruje, ako to urobiť:

pomocou systému;

triedny program
{
static void Main ( reťazec [ ] args )
{
XDocument doc = XDocument.Load ( 'employees.xml' ) ;

pre každý ( prvok XElement v doc.Potomkovia ( 'zamestnanec' ) )
{
int id = int.Parse ( prvok.Prvok ( 'id' ) .Hodnota ) ;
názov reťazca = prvok.Prvok ( 'názov' ) .Hodnota;
reťazec oddelenie = prvok.Prvok ( 'oddelenie' ) .Hodnota;
int plat = int.Parse ( prvok.Prvok ( 'plat' ) .Hodnota ) ;
Console.WriteLine ( $ 'ID: {id}, meno: {name}, oddelenie: {oddelenie}, plat: {plat' ) ;
}
}
}

Súbor XML sa načíta do objektu XDocument pomocou metódy XDocument.Load. Všetky prvky „zamestnanca“ súboru XML sa potom získajú pomocou techniky potomkov. Pre každý prvok sa k jeho podriadeným prvkom pristupuje pomocou metódy Element a ich hodnoty sa extrahujú pomocou vlastnosti Value. Nakoniec sa extrahované údaje vytlačia do konzoly.



Všimnite si, že XDocument patrí do priestoru názvov System.Xml.Linq, takže v hornej časti súboru C# musíte zahrnúť nasledujúci príkaz using

3: Použitie XmlReader

XmlReader je rýchly a efektívny spôsob čítania súboru XML v jazyku C#. Číta súbor sekvenčne, čo znamená, že načítava iba jeden uzol naraz, vďaka čomu je ideálny na prácu s veľkými súbormi XML, ktoré by sa inak v pamäti ťažko spracovávali.

pomocou systému;
pomocou System.Xml;

triedny program
{
static void Main ( reťazec [ ] args )
{
použitím ( Čítačka XmlReader = XmlReader.Create ( 'employees.xml' ) )
{
zatiaľ čo ( čitateľ.Prečítaj si ( ) )
{
ak ( reader.NodeType == XmlNodeType.Element && čitateľ.Meno == 'zamestnanec' )
{
Console.WriteLine ( 'ID: ' + čitateľ.GetAttribute ( 'id' ) ) ;
čitateľ.ReadToDescendant ( 'názov' ) ;
Console.WriteLine ( 'Názov: ' + reader.ReadElementContentAsString ( ) ) ;
čitateľ.ReadToNextSibling ( 'oddelenie' ) ;
Console.WriteLine ( 'Oddelenie:' + reader.ReadElementContentAsString ( ) ) ;
čitateľ.ReadToNextSibling ( 'plat' ) ;
Console.WriteLine ( 'Plat:' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

V tomto príklade používame metódu XmlReader.Create na vytvorenie inštancie XmlReader a odovzdanie cesty k súboru XML ako parameter. Potom použijeme slučku while na čítanie cez uzol súboru XML po uzle pomocou metódy Read XmlReader.

Vo vnútri slučky najprv skontrolujeme, či je aktuálny uzol zamestnaneckým prvkom pomocou vlastností NodeType a Name XmlReader. Ak áno, použijeme metódu GetAttribute na získanie hodnoty atribútu id.

Ďalej použijeme metódu ReadToDescendant na presun čitateľa do elementu name v elemente zamestnanec. Hodnota prvku name sa potom získa pomocou funkcie ReadElementContentAsString.

Podobne používame metódu ReadToNextSibling na presun čitateľa k ďalšiemu súrodeneckému prvku a získame hodnotu prvkov oddelenia a platu.

Nakoniec používame blokovanie, aby sme zabezpečili, že objekt XmlReader bude správne zlikvidovaný po dokončení čítania súboru XML:

4: XML na LINQ

Čítanie súboru XML pomocou LINQ to XML v jazyku C# je účinný spôsob prístupu k údajom XML a manipulácie s nimi. LINQ to XML je komponent technológie LINQ, ktorá poskytuje jednoduché a efektívne API na prácu s údajmi XML.

pomocou systému;
pomocou System.Linq;
pomocou System.Xml.Linq;

triedny program
{
static void Main ( reťazec [ ] args )
{
XDocument doc = XDocument.Load ( 'employees.xml' ) ;

var zamestnanci = z e v doc.Potomkovia ( 'zamestnanec' )
vyberte Nový
{
Id = e.Element ( 'id' ) .hodnota,
Meno = e.Prvok ( 'názov' ) .hodnota,
Oddelenie = e.Prvok ( 'oddelenie' ) .hodnota,
Plat = e.Prvok ( 'plat' ) .Hodnota
} ;
pre každý ( var zamestnanec v zamestnancov )
{
Console.WriteLine ( $ 'Id: {employee.Id}, Name: {employee.Name}, Department: {employee.Department}, Plat: {employee.Salary}' ) ;
}
}
}

V tomto kóde najprv načítame súbor XML pomocou metódy XDocument.Load(). Potom použijeme LINQ to XML na dopytovanie údajov XML a výber prvkov ID, mena, oddelenia a platu pre každý prvok zamestnanca. Tieto údaje ukladáme v anonymnom type a potom prechádzame cez výsledky, aby sme vytlačili informácie o zamestnancoch do konzoly.

5: Použitie XPath

XPath je dotazovací jazyk, ktorý sa používa na navigáciu v dokumente XML na nájdenie konkrétnych prvkov, atribútov a uzlov. Ide o efektívny nástroj na vyhľadávanie a filtrovanie informácií v dokumente XML. V jazyku C# môžeme použiť jazyk XPath na čítanie a extrahovanie údajov zo súborov XML.

pomocou systému;
pomocou System.Xml.XPath;
pomocou System.Xml;

triedny program
{
static void Main ( reťazec [ ] args )
{
XmlDocument doc = nový XmlDocument ( ) ;
doc.Načítať ( 'employees.xml' ) ;

// Vytvorte XPathNavigator z dokumentu
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Zostavte výraz XPath
XPathExpression expr = nav.Compile ( '/employees/employee/name' ) ;

// Vyhodnoťte výraz a iterujte cez výsledky
XPathNodeIterator iterator = nav.Select ( expr ) ;
zatiaľ čo ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterátor.Aktuálna.Hodnota ) ;
}
}
}

Tento kód načíta súbor „employees.xml“ pomocou XmlDocument, vytvorí z dokumentu XPathNavigator a skompiluje výraz XPath na výber všetkých prvkov pod prvkami . Potom vyhodnotí výraz a iteruje výsledky, pričom vytlačí hodnotu každého prvku .

Poznámka: používanie XPath môže byť výkonným a flexibilným spôsobom výberu prvkov a atribútov z dokumentu XML, ale môže byť aj zložitejšie ako niektoré z iných metód, o ktorých sme hovorili.

Záver

Použitie triedy XmlDocument poskytuje úplné možnosti manipulácie s DOM, ale môže byť pomalšie a náročnejšie na pamäť ako ostatné metódy. Trieda XmlReader je dobrou voľbou na čítanie veľkých súborov XML, pretože poskytuje rýchly prístup založený iba na doprednom prúde a bez vyrovnávacej pamäte. Trieda XDocument poskytuje jednoduchšiu a stručnejšiu syntax, ale nemusí byť taká výkonná ako XmlReader. Okrem toho metódy LINQ to XML a XPath poskytujú výkonné možnosti dotazovania na extrahovanie špecifických údajov zo súboru XML.