Jak číst XML v C#

Jak Cist Xml V C



Široce používaným datovým formátem pro sdílení dat na internetu je XML, protože v něm lze data ukládat a vyměňovat mezi systémy flexibilním a uživatelsky přívětivým způsobem. V C# je čtení souborů XML běžným úkolem a framework .NET poskytuje různé třídy a metody pro analýzu a čtení souborů XML. Tento příspěvek se bude zabývat využitím rozhraní .NET ke čtení XML v C#.

Čtení XML v C#

Existuje několik způsobů, jak číst soubor XML v C# a každý způsob má své výhody a nevýhody a výběr závisí na požadavcích projektu. Níže jsou uvedeny některé způsoby, jak číst soubor XML v C#:

Zde je obsah souboru XML, který jsem vytvořil a bude použit pro demonstraci při vymýšlení metod:







< ?xml verze = '1,0' kódování = 'utf-8' ? >
< zaměstnanci >
< zaměstnanec >
< id > 1 id >
< název > Sam bosh název >
< oddělení > Marketing oddělení >
< plat > 50 000 plat >
zaměstnanec >
< zaměstnanec >
< id > 2 id >
< název > Jane Doe název >
< oddělení > Finance oddělení >
< plat > 60 000 plat >
zaměstnanec >
< zaměstnanec >
< id > 3 id >
< název > James název >
< oddělení > Lidské zdroje oddělení >
< plat > 70 000 plat >
zaměstnanec >
zaměstnanci >

1: Použití XmlDocument

Chcete-li číst soubor XML v C#, můžete použít třídu XmlDocument nebo XDocument, obě jsou součástí oboru názvů System.Xml. Třída XmlDocument poskytuje přístup DOM (Document Object Model) pro čtení XML, zatímco třída XDocument poskytuje přístup LINQ (Language-Integrated Query). Zde je příklad využití třídy XmlDocument ke čtení souboru XML:



pomocí systému;
pomocí System.Xml;

třídní program
{
statické prázdno Hlavní ( tětiva [ ] argumenty )
{
XmlDocument doc = nový XmlDocument ( ) ;
doc.Načíst ( 'employees.xml' ) ;

XmlNodeList nodes = doc.DocumentElement.SelectNodes ( '/zaměstnanci/zaměstnanec' ) ;

pro každého ( Uzel XmlNode v uzly )
{
tětiva id = node.SelectSingleNode ( 'id' ) .InnerText;
string name = node.SelectSingleNode ( 'název' ) .InnerText;
string department = node.SelectSingleNode ( 'oddělení' ) .InnerText;
string plat = uzel.SelectSingleNode ( 'plat' ) .InnerText;
Console.WriteLine ( 'ID: {0}, jméno: {1}, oddělení: {2}, plat: {3}' , id , jméno, oddělení, plat ) ;
}
}
}

Tento kód používá třídu XmlDocument k načtení souboru XML a metodu SelectNodes k načtení seznamu uzlů zaměstnanců. Poté pro každý uzel zaměstnance použije metodu SelectSingleNode k načtení hodnot id, názvu, oddělení a podřízených uzlů platu a zobrazí je pomocí Console.WriteLine:







2: Použití XDocument

Alternativně můžete také použít třídu XDocument ke čtení souboru XML pomocí přístupu LINQ a níže je kód, který ilustruje, jak to udělat:

pomocí systému;

třídní program
{
statické prázdno Hlavní ( tětiva [ ] argumenty )
{
XDocument doc = XDocument.Load ( 'employees.xml' ) ;

pro každého ( prvek XElement v doc.Potomci ( 'zaměstnanec' ) )
{
int id = int.Parse ( prvek.Prvek ( 'id' ) .Hodnota ) ;
string name = element.Element ( 'název' ) .Hodnota;
řetězec oddělení = prvek.Prvek ( 'oddělení' ) .Hodnota;
int plat = int.Parse ( prvek.Prvek ( 'plat' ) .Hodnota ) ;
Console.WriteLine ( $ 'ID: {id}, jméno: {name}, oddělení: {department}, plat: {plat' ) ;
}
}
}

Soubor XML se načte do objektu XDocument pomocí metody XDocument.Load. Všechny prvky „zaměstnance“ souboru XML jsou pak načteny pomocí techniky potomků. U každého prvku se k jeho podřízeným prvkům přistupuje pomocí metody Element a jejich hodnoty se extrahují pomocí vlastnosti Value. Nakonec jsou extrahovaná data vytištěna na konzole.



Všimněte si, že XDocument patří do jmenného prostoru System.Xml.Linq, takže musíte v horní části souboru C# zahrnout následující příkaz using

3: Použití XmlReaderu

XmlReader je rychlý a efektivní způsob, jak číst soubor XML v C#. Čte soubor sekvenčně, což znamená, že načítá pouze jeden uzel najednou, takže je ideální pro práci s velkými soubory XML, se kterými by se jinak v paměti obtížně manipulovalo.

pomocí systému;
pomocí System.Xml;

třídní program
{
statické prázdno Hlavní ( tětiva [ ] argumenty )
{
použitím ( Čtečka XmlReader = XmlReader.Create ( 'employees.xml' ) )
{
zatímco ( čtenář.Přečíst ( ) )
{
-li ( reader.NodeType == XmlNodeType.Element && čtenář.Jméno == 'zaměstnanec' )
{
Console.WriteLine ( 'ID:' + čtenář.GetAttribute ( 'id' ) ) ;
čtenář.ReadToDescendant ( 'název' ) ;
Console.WriteLine ( 'Název: ' + reader.ReadElementContentAsString ( ) ) ;
čtenář.ReadToNextSibling ( 'oddělení' ) ;
Console.WriteLine ( 'Oddělení: ' + reader.ReadElementContentAsString ( ) ) ;
čtenář.ReadToNextSibling ( 'plat' ) ;
Console.WriteLine ( 'Plat:' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

V tomto příkladu používáme metodu XmlReader.Create k vytvoření instance XmlReader a předání cesty k souboru XML jako parametru. Potom použijeme smyčku while k přečtení souboru XML uzel po uzlu pomocí metody Read XmlReaderu.

Uvnitř smyčky nejprve zkontrolujeme, zda je aktuální uzel zaměstnaneckým prvkem pomocí vlastností NodeType a Name XmlReaderu. Pokud ano, použijeme metodu GetAttribute k načtení hodnoty atributu id.

Dále použijeme metodu ReadToDescendant k přesunutí čtečky do prvku name uvnitř prvku zaměstnanec. Hodnota prvku name se pak získá pomocí funkce ReadElementContentAsString.

Podobně používáme metodu ReadToNextSibling k přesunutí čtečky k dalšímu sourozeneckému prvku a získání hodnoty prvků oddělení a platu.

Nakonec používáme použití bloku, abychom zajistili, že objekt XmlReader bude správně zlikvidován poté, co dokončíme čtení souboru XML:

4: XML na LINQ

Čtení souboru XML pomocí LINQ to XML v C# je účinný způsob, jak přistupovat k datům XML a manipulovat s nimi. LINQ to XML je komponenta technologie LINQ, která poskytuje jednoduché a efektivní API pro práci s daty XML.

pomocí systému;
pomocí System.Linq;
pomocí System.Xml.Linq;

třídní program
{
statické prázdno Hlavní ( tětiva [ ] argumenty )
{
XDocument doc = XDocument.Load ( 'employees.xml' ) ;

var zaměstnanci = z e v doc.Potomci ( 'zaměstnanec' )
vybrat Nový
{
Id = e.Element ( 'id' ) .Hodnota,
Název = e.Prvek ( 'název' ) .Hodnota,
Oddělení = e.Prvek ( 'oddělení' ) .Hodnota,
Plat = e.Prvek ( 'plat' ) .Hodnota
} ;
pro každého ( var zaměstnanec v zaměstnanci )
{
Console.WriteLine ( $ 'Id: {employee.Id}, Name: {employee.Name}, Department: {employee.Department}, Plat: {employee.Salary}' ) ;
}
}
}

V tomto kódu nejprve načteme soubor XML pomocí metody XDocument.Load(). Poté použijeme LINQ to XML k dotazu na data XML a vybereme id, jméno, oddělení a prvky platu pro každý zaměstnanecký prvek. Tato data ukládáme v anonymním typu a poté procházíme výsledky, abychom vytiskli informace o zaměstnancích do konzole.

5: Použití XPath

XPath je dotazovací jazyk, který se používá k navigaci v dokumentu XML k nalezení konkrétních prvků, atributů a uzlů. Jedná se o efektivní nástroj pro vyhledávání a filtrování informací v XML dokumentu. V C# můžeme použít jazyk XPath ke čtení a extrahování dat ze souborů XML.

pomocí systému;
pomocí System.Xml.XPath;
pomocí System.Xml;

třídní program
{
statické prázdno Hlavní ( tětiva [ ] argumenty )
{
XmlDocument doc = nový XmlDocument ( ) ;
doc.Načíst ( 'employees.xml' ) ;

// Vytvořte z dokumentu XPathNavigator
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Zkompilujte výraz XPath
XPathExpression expr = nav.Compile ( '/zaměstnanci/zaměstnanec/jméno' ) ;

// Vyhodnoťte výraz a iterujte výsledky
XPathNodeIterator iterator = nav.Select ( expr ) ;
zatímco ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterátor.Aktuální.Hodnota ) ;
}
}
}

Tento kód načte soubor „employees.xml“ pomocí XmlDocument, vytvoří z dokumentu XPathNavigator a zkompiluje výraz XPath pro výběr všech prvků pod prvky . Poté vyhodnotí výraz a iteruje výsledky, přičemž vytiskne hodnotu každého prvku .

Poznámka: použití XPath může být výkonným a flexibilním způsobem výběru prvků a atributů z dokumentu XML, ale může být také složitější než některé jiné metody, o kterých jsme hovořili.

Závěr

Použití třídy XmlDocument poskytuje plné možnosti manipulace s DOM, ale může být pomalejší a náročnější na paměť než ostatní metody. Třída XmlReader je dobrou volbou pro čtení velkých souborů XML, protože poskytuje rychlý přístup založený pouze na předávání dat a bez mezipaměti. Třída XDocument poskytuje jednodušší a stručnější syntaxi, ale nemusí být tak výkonná jako XmlReader. Navíc metody LINQ to XML a XPath poskytují výkonné možnosti dotazování pro extrakci konkrétních dat ze souboru XML.