Как читать XML в C#

Kak Citat Xml V C



Широко используемым форматом данных для обмена данными в Интернете является XML, поскольку в нем можно хранить данные и обмениваться ими между системами гибким и удобным для пользователя способом. В C# чтение XML-файлов является обычной задачей, а платформа .NET предоставляет различные классы и методы для разбора и чтения XML-файлов. В этом посте мы рассмотрим использование платформы .NET для чтения XML в C#.

Чтение XML в С#

Существует несколько способов чтения XML-файла на C#, и у каждого метода есть свои преимущества и недостатки, и выбор зависит от требований проекта. Ниже приведены некоторые способы чтения XML-файла на C#:

Вот содержимое XML-файла, который я создал и который будет использоваться для демонстрации в будущих методах:







< ?xml версия '=' '1.0' кодирование '=' 'утф-8' ? >
< сотрудники >
< сотрудник >
< идентификатор > 1 идентификатор >
< имя > Сэм Бош имя >
< отделение > Маркетинг отделение >
< зарплата > 50000 зарплата >
сотрудник >
< сотрудник >
< идентификатор > 2 идентификатор >
< имя > Джейн Доу имя >
< отделение > Финансы отделение >
< зарплата > 60000 зарплата >
сотрудник >
< сотрудник >
< идентификатор > 3 идентификатор >
< имя > Джеймс имя >
< отделение > Человеческие ресурсы отделение >
< зарплата > 70000 зарплата >
сотрудник >
сотрудники >

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

Чтобы прочитать XML-файл на C#, вы можете использовать класс XmlDocument или класс XDocument, оба из которых являются частью пространства имен System.Xml. Класс XmlDocument обеспечивает подход DOM (объектная модель документа) для чтения XML, тогда как класс XDocument обеспечивает подход LINQ (интегрированный в язык запрос). Вот пример использования класса XmlDocument для чтения файла XML:



с помощью системы;
с помощью System.Xml;

программа класса
{
статическая пустота Главная ( нить [ ] аргументы )
{
Документ XmlDocument = новый документ XmlDocument ( ) ;
док.Загрузить ( 'сотрудники.xml' ) ;

Узлы XmlNodeList = doc.DocumentElement.SelectNodes ( '/Сотрудники/Сотрудник' ) ;

для каждого ( Узел XmlNode в узлы )
{
нить идентификатор = узел.SelectSingleNode ( 'идентификатор' ) .Внутренний текст;
имя строки = node.SelectSingleNode ( 'имя' ) .Внутренний текст;
строковый отдел = узел.SelectSingleNode ( 'отделение' ) .Внутренний текст;
строка оклад = узел.SelectSingleNode ( 'зарплата' ) .Внутренний текст;
Console.WriteLine ( 'ID: {0}, имя: {1}, отдел: {2}, зарплата: {3}' , идентификатор , имя, отдел, зарплата ) ;
}
}
}

Этот код использует класс XmlDocument для загрузки XML-файла и метод SelectNodes для получения списка узлов сотрудников. Затем для каждого узла сотрудника он использует метод SelectSingleNode для получения значений идентификатора, имени, отдела и зарплаты дочерних узлов и отображает их с помощью Console.WriteLine:







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

В качестве альтернативы вы также можете использовать класс XDocument для чтения XML-файла с использованием подхода LINQ, и ниже приведен код, иллюстрирующий, как это сделать:

с помощью системы;

программа класса
{
статическая пустота Главная ( нить [ ] аргументы )
{
Документ XDocument = XDocument.Load ( 'сотрудники.xml' ) ;

для каждого ( Элемент XElement в док.Потомки ( 'сотрудник' ) )
{
инт идентификатор = инт.Разбор ( элемент.Элемент ( 'идентификатор' ) .Ценить ) ;
имя строки = элемент.Элемент ( 'имя' ) .Ценить;
строковый отдел = элемент.Элемент ( 'отделение' ) .Ценить;
int зарплата = int.Parse ( элемент.Элемент ( 'зарплата' ) .Ценить ) ;
Console.WriteLine ( $ 'ID: {id}, Имя: {name}, Отдел: {department}, Зарплата: {salary}' ) ;
}
}
}

XML-файл загружается в объект XDocument с помощью метода XDocument.Load. Затем все элементы XML-файла «сотрудник» извлекаются с использованием метода потомков. Доступ к дочерним элементам каждого элемента осуществляется с помощью метода Element, а их значения извлекаются с помощью свойства Value. Наконец, извлеченные данные выводятся на консоль.



Обратите внимание, что XDocument принадлежит пространству имен System.Xml.Linq, поэтому вам необходимо включить следующий оператор using в начало файла C#.

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

XmlReader — это быстрый и эффективный способ чтения XML-файла на C#. Он читает файл последовательно, что означает, что он загружает только один узел за раз, что делает его идеальным для работы с большими файлами XML, которые в противном случае было бы трудно обрабатывать в памяти.

с помощью системы;
с помощью System.Xml;

программа класса
{
статическая пустота Главная ( нить [ ] аргументы )
{
с использованием ( Читатель XmlReader = XmlReader.Create ( 'сотрудники.xml' ) )
{
пока ( читатель.Читать ( ) )
{
если ( reader.NodeType == XmlNodeType.Element && читатель.Имя == 'сотрудник' )
{
Console.WriteLine ( 'ИДЕНТИФИКАТОР: ' + читатель.GetAttribute ( 'идентификатор' ) ) ;
читатель.ReadToDescendant ( 'имя' ) ;
Console.WriteLine ( 'Имя: ' + читатель.ReadElementContentAsString ( ) ) ;
читатель.ReadToNextSibling ( 'отделение' ) ;
Console.WriteLine ( 'Отделение: ' + читатель.ReadElementContentAsString ( ) ) ;
читатель.ReadToNextSibling ( 'зарплата' ) ;
Console.WriteLine ( 'Зарплата: ' + читатель.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

В этом примере мы используем метод XmlReader.Create для создания экземпляра XmlReader и передачи пути к XML-файлу в качестве параметра. Затем мы используем цикл while для чтения XML-файла узел за узлом, используя метод Read XmlReader.

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

Затем мы используем метод ReadToDescendant, чтобы переместить средство чтения к элементу имени внутри элемента сотрудника. Затем значение элемента name получается с помощью функции ReadElementContentAsString.

Точно так же мы используем метод ReadToNextSibling, чтобы переместить средство чтения к следующему родственному элементу и получить значение элементов отдела и зарплаты.

Наконец, мы используем блок using, чтобы гарантировать, что объект XmlReader будет правильно удален после того, как мы закончим чтение XML-файла:

4: XML в LINQ

Чтение файла XML с помощью LINQ to XML в C# — это мощный способ доступа к данным XML и управления ими. LINQ to XML — это компонент технологии LINQ, предоставляющий простой и эффективный API для работы с XML-данными.

с помощью системы;
с помощью System.Linq;
используя System.Xml.Linq;

программа класса
{
статическая пустота Главная ( нить [ ] аргументы )
{
Документ XDocument = XDocument.Load ( 'сотрудники.xml' ) ;

var сотрудников = из e в док.Потомки ( 'сотрудник' )
выбирать новый
{
Идентификатор = e.Элемент ( 'идентификатор' ) .Ценить,
Имя = e.Элемент ( 'имя' ) .Ценить,
Отдел = e.Элемент ( 'отделение' ) .Ценить,
Зарплата = е.Элемент ( 'зарплата' ) .Ценить
} ;
для каждого ( вар работник в сотрудники )
{
Console.WriteLine ( $ 'Id: {employee.Id}, имя: {employee.Name}, отдел: {employee.Department}, зарплата: {employee.Salary}' ) ;
}
}
}

В этом коде мы сначала загружаем файл XML с помощью метода XDocument.Load(). Затем мы используем LINQ to XML для запроса данных XML и выбора элементов идентификатора, имени, отдела и зарплаты для каждого элемента сотрудника. Мы сохраняем эти данные в анонимном типе, а затем прокручиваем результаты, чтобы вывести информацию о сотруднике на консоль.

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

XPath — это язык запросов, который используется для навигации по XML-документу с целью поиска определенных элементов, атрибутов и узлов. Это эффективный инструмент для поиска и фильтрации информации в XML-документе. В C# мы можем использовать язык XPath для чтения и извлечения данных из файлов XML.

с помощью системы;
используя System.Xml.XPath;
с помощью System.Xml;

программа класса
{
статическая пустота Главная ( нить [ ] аргументы )
{
Документ XmlDocument = новый документ XmlDocument ( ) ;
док.Загрузить ( 'сотрудники.xml' ) ;

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

// Скомпилируйте выражение XPath
XPathExpression выражение = nav.Скомпилировать ( '/сотрудники/сотрудник/имя' ) ;

// Вычислите выражение и выполните итерацию по результатам
Итератор XPathNodeIterator = 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-файла.