Как да четем XML в C#

Kak Da Cetem Xml V C



Широко използваният формат на данни за споделяне на данни в интернет е XML, тъй като данните могат да се съхраняват в него и да се обменят между системите по гъвкав и удобен за потребителя начин. В C# четенето на XML файлове е обичайна задача, а .NET framework предоставя различни класове и методи за анализиране и четене на XML файлове. Тази публикация ще разгледа използването на .NET framework за четене на XML в C#.

Четене на XML в C#

Има няколко начина за четене на XML файл в C# и всеки метод има своите предимства и недостатъци, а изборът зависи от изискванията на проекта. По-долу са някои начини за четене на XML файл в C#:

Ето съдържанието на XML файла, който създадох и ще се използва за демонстрация при следващи методи:







< ?xml версия = '1,0' кодиране = 'utf-8' ? >
< служители >
< служител >
< документ за самоличност > 1 документ за самоличност >
< име > Sam bosh име >
< отдел > Маркетинг отдел >
< заплата > 50 000 заплата >
служител >
< служител >
< документ за самоличност > 2 документ за самоличност >
< име > Джейн Доу име >
< отдел > Финанси отдел >
< заплата > 60 000 заплата >
служител >
< служител >
< документ за самоличност > 3 документ за самоличност >
< име > Джеймс име >
< отдел > Човешки ресурси отдел >
< заплата > 70 000 заплата >
служител >
служители >

1: Използване на XmlDocument

За да прочетете XML файл в C#, можете да използвате класа XmlDocument или класа XDocument, като и двата са част от пространството на имената System.Xml. Класът XmlDocument предоставя DOM (Document Object Model) подход за четене на XML, докато класът XDocument предоставя LINQ (Language-Integrated Query) подход. Ето пример за използване на класа XmlDocument за четене на XML файл:



използване на системата;
използване на System.Xml;

клас програма
{
статична празнота Основна ( низ [ ] аргументи )
{
XmlDocument doc = нов XmlDocument ( ) ;
док.Заредете ( 'служители.xml' ) ;

XmlNodeList възли = doc.DocumentElement.SelectNodes ( '/служители/служител' ) ;

за всеки ( XmlNode възел в възли )
{
низ документ за самоличност = node.SelectSingleNode ( 'документ за самоличност' ) .InnerText;
име на низ = възел.SelectSingleNode ( 'име' ) .InnerText;
низ отдел = node.SelectSingleNode ( 'отдел' ) .InnerText;
низ заплата = възел.SelectSingleNode ( 'заплата' ) .InnerText;
Console.WriteLine ( „ID: {0}, име: {1}, отдел: {2}, заплата: {3}“ , документ за самоличност , име, отдел, заплата ) ;
}
}
}

Този код използва класа XmlDocument за зареждане на XML файла и метода SelectNodes за извличане на списък с възли на служители. След това, за всеки възел на служител, той използва метода SelectSingleNode, за да извлече стойностите на дъщерните възли на идентификатора, името, отдела и заплатата и ги показва с помощта на Console.WriteLine:







2: Използване на XDocument

Като алтернатива можете също да използвате класа XDocument, за да прочетете XML файл с помощта на LINQ подход, а по-долу е кодът, който илюстрира как да го направите:

използване на системата;

клас програма
{
статична празнота Основна ( низ [ ] аргументи )
{
XDocument doc = XDocument.Load ( 'служители.xml' ) ;

за всеки ( XElement елемент в док.Потомци ( 'служител' ) )
{
вътр документ за самоличност = int.Parse ( елемент.Елемент ( 'документ за самоличност' ) .Стойност ) ;
име на низ = елемент.Елемент ( 'име' ) .Стойност;
низов отдел = element.Element ( 'отдел' ) .Стойност;
int заплата = int.Parse ( елемент.Елемент ( 'заплата' ) .Стойност ) ;
Console.WriteLine ( $ „ID: {id}, име: {name}, отдел: {department}, заплата: {salary}“ ) ;
}
}
}

XML файлът се зарежда в обект XDocument с помощта на метода XDocument.Load. След това всички „служители“ елементи на XML файла се извличат с помощта на техниката на наследници. За всеки елемент неговите дъщерни елементи се осъществяват чрез метода Element и техните стойности се извличат чрез свойството Value. Накрая извлечените данни се отпечатват на конзолата.



Обърнете внимание, че XDocument принадлежи към пространството от имена System.Xml.Linq, така че трябва да включите следния израз за използване в горната част на вашия C# файл

3: Използване на XmlReader

XmlReader е бърз и ефективен начин за четене на XML файл в C#. Той чете файла последователно, което означава, че зарежда само един възел наведнъж, което го прави идеален за работа с големи XML файлове, които иначе биха били трудни за работа в паметта.

използване на системата;
използване на System.Xml;

клас програма
{
статична празнота Основна ( низ [ ] аргументи )
{
използвайки ( Четец на XmlReader = XmlReader.Create ( 'служители.xml' ) )
{
докато ( читател.Прочети ( ) )
{
ако ( reader.NodeType == XmlNodeType.Element && читател.Име == 'служител' )
{
Console.WriteLine ( 'ДОКУМЕНТ ЗА САМОЛИЧНОСТ: ' + reader.GetAttribute ( 'документ за самоличност' ) ) ;
reader.ReadToDescendant ( 'име' ) ;
Console.WriteLine ( „Име:“ + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextSibling ( 'отдел' ) ;
Console.WriteLine ( 'Отдел:' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextSibling ( 'заплата' ) ;
Console.WriteLine ( 'Заплата: ' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

В този пример използваме метод XmlReader.Create за създаване на екземпляр на XmlReader и предаване на пътя на XML файла като параметър. След това използваме цикъл while, за да прочетем XML файла възел по възел, използвайки метода Read на XmlReader.

Вътре в цикъла първо проверяваме дали текущият възел е елемент на служител, използвайки свойствата NodeType и Name на XmlReader. Ако е така, ние използваме метода GetAttribute, за да извлечем стойността на атрибута id.

След това използваме метода ReadToDescendant, за да преместим четеца към елемента име вътре в елемента на служителя. След това стойността на елемента име се получава чрез използване на функцията ReadElementContentAsString.

По подобен начин използваме метода ReadToNextSibling, за да преместим четеца към следващия елемент на брат и да получим стойността на елементите на отдела и заплатата.

И накрая, използваме блок с използване, за да гарантираме, че обектът XmlReader е правилно изтрит, след като приключим с четенето на XML файла:

4: XML към LINQ

Четенето на XML файл с помощта на LINQ към XML в C# е мощен начин за достъп и манипулиране на XML данни. LINQ to XML е компонент на технологията LINQ, който предоставя прост и ефективен API за работа с XML данни.

използване на системата;
използване на System.Linq;
използване на System.Xml.Linq;

клас програма
{
статична празнота Основна ( низ [ ] аргументи )
{
XDocument doc = XDocument.Load ( 'служители.xml' ) ;

вар служители = от e в док.Потомци ( 'служител' )
изберете нов
{
Id = e.Element ( 'документ за самоличност' ) .Стойност,
Име = e.Element ( 'име' ) .Стойност,
Отдел = e.Element ( 'отдел' ) .Стойност,
Заплата = e.Element ( 'заплата' ) .Стойност
} ;
за всеки ( var служител в служители )
{
Console.WriteLine ( $ „Id: {employee.Id}, име: {employee.Name}, отдел: {employee.Department}, заплата: {employee.Salary}“ ) ;
}
}
}

В този код първо зареждаме XML файла с помощта на метода XDocument.Load(). След това използваме LINQ към XML, за да направим запитване към XML данните и да изберем елементите за идентификатор, име, отдел и заплата за всеки елемент на служител. Ние съхраняваме тези данни в анонимен тип и след това преминаваме през резултатите, за да отпечатаме информацията за служителите на конзолата.

5: Използване на XPath

XPath е език за заявки, който се използва за навигиране през XML документ за намиране на конкретни елементи, атрибути и възли. Това е ефективен инструмент за търсене и филтриране на информация в XML документ. В C# можем да използваме езика XPath за четене и извличане на данни от XML файлове.

използване на системата;
използване на System.Xml.XPath;
използване на System.Xml;

клас програма
{
статична празнота Основна ( низ [ ] аргументи )
{
XmlDocument doc = нов XmlDocument ( ) ;
док.Заредете ( 'служители.xml' ) ;

// Създайте XPathNavigator от документа
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Компилирайте XPath израза
XPathExpression израз = nav.Compile ( '/служители/служител/име' ) ;

// Оценете израза и прегледайте резултатите
XPathNodeIterator iterator = nav.Select ( израз ) ;
докато ( итератор.MoveNext ( ) )
{
Console.WriteLine ( iterator.Current.Value ) ;
}
}
}

Този код зарежда файла “employees.xml” с помощта на XmlDocument, създава XPathNavigator от документа и компилира XPath израз, за ​​да избере всички елементи под елементите . След това оценява израза и итерира резултатите, като отпечатва стойността на всеки елемент .

Забележка: използването на XPath може да бъде мощен и гъвкав начин за избиране на елементи и атрибути от XML документ, но също така може да бъде по-сложно от някои от другите методи, които обсъждахме.

Заключение

Използването на класа XmlDocument предоставя пълни възможности за манипулиране на DOM, но може да бъде по-бавно и изисква повече памет от другите методи. Класът XmlReader е добра опция за четене на големи XML файлове, тъй като осигурява бърз, само за напред и некеширан подход, базиран на поток. Класът XDocument предоставя по-прост и по-сбит синтаксис, но може да не е толкова ефективен като XmlReader. Освен това методите LINQ to XML и XPath предоставят мощни възможности за заявки за извличане на конкретни данни от XML файл.