Полное руководство по языку программирования С# 14 и платформе .NET 10 / Работа с XML

XML-документы

Начальный ⏱ 3 мин чтения 👁 2 🕓 обновлено 11.08.2026

На сегодняшний день XML является одним из распространенных стандартов документов, который позволяет в удобной форме сохранять сложные по структуре данные. Поэтому разработчики платформы .NET включили в фреймворк широкие возможности для работы с XML.

Прежде чем перейти непосредственно к работе с XML-файлами, сначала рассмотрим, что представляет собой xml-документ и как он может хранить объекты, используемые в программе на c#.

Например, у нас есть следующий класс:


class Person
{
    public string Name { get;}
    public int Age { get; set; }
    public string Company { get; set; }
    public Person(string name, int age, string company)
    {
        Name = name;
        Age = age;
        Company = company;
    }
}

В программе на C# мы можем создать список объектов класса Person:


var employees = new List<Person>
{
    new Person ("Tom", 37, "Microsoft"),
    new Person ("Bob", 41, "Google")
};

Чтобы сохранить список в формате xml мы могли бы использовать следующий xml-файл:


<?xml version="1.0" encoding="utf-8" ?>
<people>
  <person name="Tom">
    <company>Microsoft</company>
    <age>37</age>
  </person>
  <person name="Bob">
    <company>Google</company>
    <age>41</age>
  </person>
</people>

XML-документ объявляет строка <?xml version="1.0" encoding="utf-8" ?>. Она задает версию (1.0) и кодировку (utf-8) xml. Далее идет собственно содержимое документа.

XML-документ должен иметь один единственный корневой элемент, внутрь которого помещаются все остальные элементы. В данном случае таким элементом является элемент <people>. Внутри корневого элемента <people> задан набор элементов <person>. Вне корневого элемента мы не можем разместить элементы person.

Каждый элемент определяется с помощью открывающего и закрывающего тегов, например, <person> и </person>, внутри которых помещается значение или содержимое элементов. Также элемент может иметь сокращенное объявление: <person /> - в конце элемента помещается слеш.

Элемент может иметь вложенные элементы и атрибуты. В данном случае каждый элемент person имеет два вложенных элемента company и age и атрибут name.

Атрибуты определяются в теле элемента и имеют следующую форму: название="значение". Например, <person name="Bill Gates">, в данном случае атрибут называется name и имеет значение Bill Gates

Внутри простых элементов помещается их значение. Например, <company>Google</company> - элемент company имеет значение Google.

Названия элементов являются регистрозависимыми, поэтому <company> и <COMPANY> будут представлять разные элементы.

Таким образом, весь список Users из кода C# сопоставляется с корневым элементом <people>, каждый объект Person - с элементом <person>, а каждое свойство объекта Person - с атрибутом или вложенным элементом элемента <person>

Что использовать для свойств - вложенные элементы или атрибуты? Это вопрос предпочтений - мы можем использовать как атрибуты, так и вложенные элементы. Так, в предыдущем примере вполне можно использовать вместо атрибута вложенный элемент:


<?xml version="1.0" encoding="utf-8" ?>
<people>
  <person>
	<name>Tom</name>
    <company>Microsoft</company>
    <age>37</age>
  </person>
  <person>
	<name>Bob</name>
    <company>Google</company>
    <age>41</age>
  </person>
</people>

Теперь рассмотрим основные подходы для работы с XML, которые имеются в C#.

Проверь себя

📋 Тест по теме «XML-документы» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

class _____
{
    public string Name { get;}
    public int Age { get; set; }
    public string Company { get; set; }
    public Person(string name, int age, string company)
    {
        Name = name;
        Age = age;
        Company = company;
    }
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

var employees = _____ List<Person>
{
    new Person ("Tom", 37, "Microsoft"),
    new Person ("Bob", 41, "Google")
};
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

<?xml version="_____.0" encoding="utf-8" ?>
<people>
  <person name="Tom">
    <company>Microsoft</company>
    <age>37</age>
  </person>
  <person name="Bob">
    <company>Google</company>
    <age>41</age>
  </person>
</people>
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

<?xml version="1._____" encoding="utf-8" ?>
<people>
  <person>
	<name>Tom</name>
    <company>Microsoft</company>
    <age>37</age>
  </person>
  <person>
	<name>Bob</name>
    <company>Google</company>
    <age>41</age>
  </person>
</people>
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

class Person
{
    public string Name { _____;}
    public int Age { get; set; }
    public string Company { get; set; }
    public Person(string name, int age, string company)
    {
        Name = name;
        Age = age;
        Company = company;
    }
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

class Person
{
    public string Name { get;}
    public int Age { get; set; }
    public string _____ { get; set; }
    public Person(string _____, int age, string company)
    {
        Name = name;
        Age = age;
        Company = company;
    }
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

var employees = _____ List<Person>
{
    new Person ("Tom", 37, "_____"),
    new Person ("Bob", 41, "Google")
};
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

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

    new Person ("Tom", 37, "Microsoft"),
{
var employees = new List<Person>
};
    new Person ("Bob", 41, "Google")
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «XML-документы»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «XML-документы», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

class Person
{
    public string Name { get;}
    public int Age { get; set; }
    public string Company { get; set; }
    public Person(string name, int age, string company)
    {
        Name = name;
        Age = age;
        Company = company;
    }
}
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «XML-документы»
+30 XP

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

var employees = new List<Person>
{
    new Person ("Tom", 37, "Microsoft"),
    new Person ("Bob", 41, "Google")
};
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «XML-документы»
+50 XP

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

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «XML-документы»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «XML-документы». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.