XML парсер на C#
Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.
Текущая статья посвящена разбору XML на C# — загрузка, XPath и сериализация.
Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:
- Основы
- Система и сеть
- Данные и разметка
- Код и разработка
- Языки
- Искусственный интеллект
- Проект
- Инфраструктура и безопасность
- Спин-офф
Обязательно пройдитесь.
А теперь приступим к нашему предмету.
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 перед парсингом, но это выходит за рамки базового примера.