Č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ů
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.