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

Linq to Xml. Создание документа XML

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

Еще один подход к работе с Xml представляет технология LINQ to XML. Вся функциональность LINQ to XML содержится в пространстве имен System.Xml.Linq. Рассмотрим основные классы этого пространства имен:

  • XAttribute: представляет атрибут xml-элемента

  • XComment: представляет комментарий

  • XDocument: представляет весь xml-документ

  • XElement: представляет отдельный xml-элемент

Ключевым классом является XElement, который позволяет получать вложенные элементы и управлять ими. Среди его методов можно отметить следующие:

  • Add(): добавляет новый атрибут или элемент

  • Attributes(): возвращает коллекцию атрибутов для данного элемента

  • Elements(): возвращает все дочерние элементы данного элемента

  • Remove(): удаляет данный элемент из родительского объекта

  • RemoveAll(): удаляет все дочерние элементы и атрибуты у данного элемента

Итак, используем функциональность LINQ to XML и создадим новый XML-документ:


using System.Xml.Linq;

XDocument xdoc = new XDocument();
// создаем первый элемент person
XElement tom = new XElement("person");
// создаем атрибут name
XAttribute tomNameAttr = new XAttribute("name", "Tom");
// создаем два элемента company и age 
XElement tomCompanyElem = new XElement("company", "Microsoft");
XElement tomAgeElem = new XElement("age", 37);
// добавляем атрибут и элементы в первый элемент person
tom.Add(tomNameAttr);
tom.Add(tomCompanyElem);
tom.Add(tomAgeElem);

// создаем второй элемент person
XElement bob = new XElement("person");
// создаем для него атрибут name
XAttribute bobNameAttr = new XAttribute("name", "Bob");
// и два элемента - company и age
XElement bobCompanyElem = new XElement("company", "Google");
XElement bobAgeElem = new XElement("age", 41);
bob.Add(bobNameAttr);
bob.Add(bobCompanyElem);
bob.Add(bobAgeElem);
// создаем корневой элемент
XElement people = new XElement("people");
// добавляем два элемента person в корневой элемент
people.Add(tom);
people.Add(bob);
// добавляем корневой элемент в документ
xdoc.Add(people);
//сохраняем документ
xdoc.Save("people.xml");

Console.WriteLine("Data saved");

Чтобы создать документ, нам нужно создать объект класса XDocument. Это объект самого верхнего уровня в хml-документе.

Элементы создаются с помощью конструктора класса XElement. Конструктор имеет ряд перегруженных версий. Первый параметр конструктора передает название элемента, например, person. Второй параметр передает значение этого элемента.

Создание атрибута аналогично созданию элемента. Затем все атрибуты и элементы добавляются в элементы person с помощью метода Add().

Так как документ xml должен иметь один корневой элемент, то затем все элементы person добавляются в один контейнер - элемент people.

В конце корневой элемент добавляется в объект XDocument, и этот объект сохраняется на диске в xml-файл с помощью метода Save().

Если мы откроем сохраненный файл people.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>

Конструктор класса XElement позволяют задать набор объектов, которые будут входить в элемент. И предыдущий пример мы могли бы сократить следующим способом:


using System.Xml.Linq;

XDocument xdoc = new XDocument(new XElement("people",
    new XElement("person",
        new XAttribute("name", "Tom"),
        new XElement("company", "Microsoft"),
        new XElement("age", 37)),
    new XElement("person",
        new XAttribute("name", "Bob"),
        new XElement("company", "Google"),
        new XElement("age", 41))));
xdoc.Save("people2.xml");

Console.WriteLine("Data saved");

Проверь себя

📋 Тест по теме «Linq to Xml. Создание документа XML» Тест по теме

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

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

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

using _____.Xml.Linq;

XDocument xdoc = new XDocument();
// создаем первый элемент person
XElement tom = new XElement("person");
// создаем атрибут name
XAttribute tomNameAttr = new XAttribute("name", "Tom");
// создаем два элемента company и age 
XElement tomCompanyElem = new XElement("company", "Microsoft");
XElement tomAgeElem = new XElement("age", 37);
// добавляем атрибут и элементы в первый элемент person
tom.Add(tomNameAttr);
tom.Add(tomCompanyElem);
tom.Add(tomAgeElem);

// создаем второй элемент person
XElement bob = new XElement("person");
// создаем для него атрибут name
XAttribute bobNameAttr = new XAttribute("name", "Bob");
// и два элемента - company и age
XElement bobCompanyElem = new XElement("company", "Google");
XElement bobAgeElem = new XElement("age", 41);
bob.Add(bobNameAttr);
bob.Add(bobCompanyElem);
bob.Add(bobAgeElem);
// создаем корневой элемент
XElement people = new XElement("people");
// добавляем два элемента person в корневой элемент
people.Add(tom);
people.Add(bob);
// добавляем корневой элемент в документ
xdoc.Add(people);
//сохраняем документ
xdoc.Save("people.xml");

Console.WriteLine("Data saved");
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

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

<?xml _____="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>
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

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

using System.Xml._____;

XDocument xdoc = new XDocument(new XElement("people",
    new XElement("person",
        new XAttribute("name", "Tom"),
        new XElement("company", "Microsoft"),
        new XElement("age", 37)),
    new XElement("person",
        new XAttribute("name", "Bob"),
        new XElement("company", "Google"),
        new XElement("age", 41))));
xdoc.Save("people2.xml");

Console.WriteLine("Data saved");
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

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

using System.Xml.Linq;

_____ xdoc = new XDocument();
// создаем первый элемент person
XElement tom = new XElement("person");
// создаем атрибут name
XAttribute tomNameAttr = new XAttribute("name", "Tom");
// создаем два элемента company и age 
XElement tomCompanyElem = new XElement("company", "Microsoft");
XElement tomAgeElem = new XElement("age", 37);
// добавляем атрибут и элементы в первый элемент person
tom.Add(tomNameAttr);
tom.Add(tomCompanyElem);
tom.Add(tomAgeElem);

// создаем второй элемент person
XElement bob = new XElement("person");
// создаем для него атрибут name
XAttribute bobNameAttr = new XAttribute("name", "Bob");
// и два элемента - company и age
XElement bobCompanyElem = new XElement("company", "Google");
XElement bobAgeElem = new XElement("age", 41);
bob.Add(bobNameAttr);
bob.Add(bobCompanyElem);
bob.Add(bobAgeElem);
// создаем корневой элемент
XElement people = new XElement("people");
// добавляем два элемента person в корневой элемент
people.Add(tom);
people.Add(bob);
// добавляем корневой элемент в документ
xdoc.Add(people);
//сохраняем документ
xdoc.Save("people.xml");

Console.WriteLine("Data saved");
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

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

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

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

using System.Xml.Linq;

XDocument xdoc = _____ XDocument();
// создаем первый элемент person
XElement tom = new XElement("person");
// создаем атрибут name
_____ tomNameAttr = new XAttribute("name", "Tom");
// создаем два элемента company и age 
XElement tomCompanyElem = new XElement("company", "Microsoft");
XElement tomAgeElem = new XElement("age", 37);
// добавляем атрибут и элементы в первый элемент person
tom.Add(tomNameAttr);
tom.Add(tomCompanyElem);
tom.Add(tomAgeElem);

// создаем второй элемент person
XElement bob = new XElement("person");
// создаем для него атрибут name
XAttribute bobNameAttr = new XAttribute("name", "Bob");
// и два элемента - company и age
XElement bobCompanyElem = new XElement("company", "Google");
XElement bobAgeElem = new XElement("age", 41);
bob.Add(bobNameAttr);
bob.Add(bobCompanyElem);
bob.Add(bobAgeElem);
// создаем корневой элемент
XElement people = new XElement("people");
// добавляем два элемента person в корневой элемент
people.Add(tom);
people.Add(bob);
// добавляем корневой элемент в документ
xdoc.Add(people);
//сохраняем документ
xdoc.Save("people.xml");

Console.WriteLine("Data saved");
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

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

<?xml version="1.0" encoding="utf-8"?>
<people>
  <person name="Tom">
    <company>Microsoft</company>
    <age>_____</age>
  </person>
  <person name="Bob">
    <company>_____</company>
    <age>41</age>
  </person>
</people>
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Linq to Xml. Создание документа XML»
+30 XP

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

using System.Xml.Linq;

XDocument xdoc = new XDocument();
// создаем первый элемент person
XElement tom = new XElement("person");
// создаем атрибут name
XAttribute tomNameAttr = new XAttribute("name", "Tom");
// создаем два элемента company и age 
XElement tomCompanyElem = new XElement("company", "Microsoft");
XElement tomAgeElem = new XElement("age", 37);
// добавляем атрибут и элементы в первый элемент person
tom.Add(tomNameAttr);
tom.Add(tomCompanyElem);
tom.Add(tomAgeElem);

// создаем второй элемент person
XElement bob = new XElement("person");
// создаем для него атрибут name
XAttribute bobNameAttr = new XAttribute("name", "Bob");
// и два элемента - company и age
XElement bobCompanyElem = new XElement("company", "Google");
XElement bobAgeElem = new XElement("age", 41);
bob.Add(bobNameAttr);
bob.Add(bobCompanyElem);
bob.Add(bobAgeElem);
// создаем корневой элемент
XElement people = new XElement("people");
// добавляем два элемента person в корневой элемент
people.Add(tom);
people.Add(bob);
// добавляем корневой элемент в документ
xdoc.Add(people);
//сохраняем документ
xdoc.Save("people.xml");

Console.WriteLine("Data saved");
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Linq to Xml. Создание документа XML»
+30 XP

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

<?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>
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Linq to Xml. Создание документа XML»
+50 XP

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

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

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

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

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

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