Что такое XML?

Ответ

XML (eXtensible Markup Language) — это строгий текстовый формат разметки для хранения и передачи структурированных данных. Он определяет набор правил для кодирования документов в формате, который одновременно читаем человеком и машиной.

Основные характеристики:

  • Самодокументируемость: структура данных описывается тегами и атрибутами.
  • Строгий синтаксис: требует корректной вложенности, закрывающих тегов и может быть проверен на соответствие схеме (XSD/DTD).
  • Платформо- и языконезависимость.
  • Поддержка пространств имен (namespaces) для избежания конфликтов имен тегов.

Области применения: конфигурационные файлы (например, .csproj), веб-сервисы (SOAP), обмен данными между разнородными системами, документы офисных пакетов (DOCX, XLSX).

Пример XML-документа:

<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="http://example.org/books">
  <book id="bk101">
    <author>Гамма, Эрих</author>
    <title>Приемы объектно-ориентированного проектирования. Паттерны проектирования</title>
    <genre>Компьютерная литература</genre>
    <price>44.95</price>
    <publish_date>1994-10-01</publish_date>
  </book>
</catalog>

Работа с XML в C#: В .NET доступно несколько API, выбор зависит от задачи:

  1. LINQ to XML (XDocument, XElement) — современный и рекомендуемый подход:

    // Чтение
    XDocument doc = XDocument.Load("books.xml");
    var titles = doc.Descendants("title")
                    .Select(e => e.Value)
                    .ToList();
    
    // Создание
    XElement newBook = new XElement("book",
        new XAttribute("id", "bk102"),
        new XElement("title", "CLR via C#")
    );
  2. XmlDocument (DOM-модель): Загружает весь документ в память, удобна для навигации и редактирования.
  3. XmlReader / XmlWriter: Потоковое чтение и запись с минимальным потреблением памяти, идеально для больших файлов.

Ответ 18+ 🔞

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

Ну, то есть, представь: тебе нужно описать каталог книг. Можно, конечно, в столбик на салфетке написать, но тогда другая программа, тупая как пробка, нихуя не поймёт. А в XML — всё чётко, по полочкам.

Вот смотри, как это выглядит, реальный пример:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <book id="bk101">
    <author>Гамма, Эрих</author>
    <title>Приемы объектно-ориентированного проектирования. Паттерны проектирования</title>
    <genre>Компьютерная литература</genre>
    <price>44.95</price>
    <publish_date>1994-10-01</publish_date>
  </book>
</catalog>

Видишь? Прям как дерево. Каталог, внутри книга, у книги атрибут id, а внутри уже поля лежат: автор, название. И человеку читать можно, и машине разобрать — красота.

Где эту хуйню применяют? Да везде! Конфиги проектов в Visual Studio (этот твой .csproj — он же XML внутри), какие-нибудь древние, но живучие SOAP-сервисы, документы Word и Excel (да-да, засунь .docx в архиватор и посмотри — внутри XML!). Короче, стандарт де-факто для структурированного обмена данными, особенно между разными системами, которые друг про друга нихуя не знают.

А теперь самое интересное — как с этим работать в C#? Вариантов, блядь, несколько, как и всегда в этом нашем .NET.

  1. LINQ to XML — это сейчас царь и бог. Современно, удобно, через LINQ всё делается. Читать — просто, писать — вообще песня.

    // Прочитать документ и вытащить все названия
    XDocument doc = XDocument.Load("books.xml");
    var titles = doc.Descendants("title")
                    .Select(e => e.Value)
                    .ToList(); // Вот и всё, уже список строк
    
    // Создать новую книжку с нуля
    XElement newBook = new XElement("book",
        new XAttribute("id", "bk102"),
        new XElement("title", "CLR via C#")
    );

    Чисто, элегантно, без лишней ебли. Рекомендую.

  2. XmlDocument — это как старый дедовский метод. Загружает весь документ разом в память, в виде дерева (DOM). Удобно, если файл не гигантский и нужно по нему лазить туда-сюда, менять что-то. Но для огромных XML-файлов — это самоубийство, память сожрёт.

  3. XmlReader и XmlWriter — это для настоящих маньяков, которым важна производительность. Читают и пишут файл потоком, не загружая всё в память. Представь, тебе нужно прочитать XML-дамп размером в 10 гигабайт. XmlDocument просто ляжет и умрёт, а XmlReader будет читать его по кусочкам, как будто шлангом сосёт. Мощно, но код писать сложнее, не для слабаков.

Так что выбор простой: для 99% задач бери LINQ to XML и не парься. А если вдруг упрёшься в какой-нибудь файл размером с государственный бюджет — тогда уже вспоминай про XmlReader.