XML парсер на C#

Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.

Текущая статья посвящена разбору XML на C# — загрузка, XPath и сериализация.

Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:

  1. Основы
  2. Система и сеть
  3. Данные и разметка
  4. Код и разработка
  5. Языки
  6. Искусственный интеллект
  7. Проект
  8. Инфраструктура и безопасность
  9. Спин-офф

Обязательно пройдитесь.

А теперь приступим к нашему предмету.

Теория и соседние материалы

XML парсер на C#

XML (eXtensible Markup Language) — это текстовый формат для хранения и передачи структурированных данных. В экосистеме .NET существует несколько способов работы с XML: от низкоуровневого чтения через XmlReader до высокоуровневой десериализации объектов с помощью XmlSerializer. Ниже представлены три основных подхода к парсингу XML-документов на C#.


1. Парсинг через XmlDocument (DOM-подход)

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


Пример XML-файла (books.xml):

<?xml version="1.0" encoding="utf-8"?>
<Library>
  <Book id="1">
    <Title>Война и мир</Title>
    <Author>Лев Толстой</Author>
    <Year>1869</Year>
  </Book>
  <Book id="2">
    <Title>1984</Title>
    <Author>Джордж Оруэлл</Author>
    <Year>1949</Year>
  </Book>
</Library>

Код парсера:

Особенности:

  • Поддержка XPath-выражений через SelectNodes и SelectSingleNode.
  • Полный контроль над структурой документа.
  • Высокое потребление памяти при больших файлах.

2. Парсинг через XmlReader (потоковый подход)

XmlReader читает XML последовательно, не загружая всё в память. Это предпочтительный способ для обработки больших файлов.

Особенности:

  • Минимальное потребление памяти.
  • Однопроходная обработка — нельзя вернуться к предыдущему узлу.
  • Требует аккуратного управления состоянием чтения.

3. Десериализация в объекты через XmlSerializer

Если структура XML известна заранее, можно описать её с помощью классов и автоматически преобразовать XML в объекты C#.


Шаг 1: Определение моделей


Шаг 2: Десериализация

Особенности:

  • Автоматическое сопоставление XML-элементов со свойствами объекта.
  • Требует атрибутов ([XmlElement], [XmlAttribute]) для точного контроля.
  • Не подходит для динамических или неизвестных схем.

Сравнение подходов

Критерий XmlDocument XmlReader XmlSerializer
Потребление памяти Высокое Минимальное Умеренное
Производительность Средняя Высокая Средняя
Удобство использования Высокое Низкое Очень высокое
Поддержка XPath Да Нет Нет
Подходит для больших файлов Нет Да Ограниченно

Обработка ошибок и валидация

Для надёжной работы рекомендуется оборачивать парсинг в блоки try-catch:

Также можно использовать XSD-схемы для валидации XML перед парсингом, но это выходит за рамки базового примера.