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

Изменение документа в LINQ to XML

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

Возьмем xml-файл 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>

Добавление данных

Для добавления данных в документ xml у объекта XElement применяется метод Add(), в который передается добавляемый объект:


using System.Xml.Linq;

XDocument xdoc = XDocument.Load("people.xml");
XElement? root = xdoc.Element("people");

if(root != null)
{
    // добавляем новый элемент
    root.Add(new XElement("person",
                new XAttribute("name", "Sam"),
                new XElement("company", "JetBrains"),
                new XElement("age", 28)));

    xdoc.Save("people.xml");
}

// выводим xml-документ на консоль
Console.WriteLine(xdoc);

В результате сформируется и сохранится на диск новый документ:

<people>
  <person name="Tom">
    <company>Microsoft</company>
    <age>37</age>
  </person>
  <person name="Bob">
    <company>Google</company>
    <age>41</age>
  </person>
  <person name="Sam">
    <company>JetBrains</company>
    <age>28</age>
  </person>
</people>

Изменение данных

Для изменения данных в документ xml необходимо получить элемент, который надо изменить, и затем можно отредактировать значения его отдельных атрибутов или вложенных элементов. Изменим элемент person, в котором атрибут name = "Tom":


using System.Xml.Linq;

XDocument xdoc = XDocument.Load("people.xml");

// получим элемент person с name = "Tom"
var tom = xdoc.Element("people")?
    .Elements("person")
    .FirstOrDefault(p => p.Attribute("name")?.Value == "Tom");

if(tom != null)
{
    //  меняем атрибут name
    var name = tom.Attribute("name");
    if (name != null) name.Value = "Tomas";


    //  меняем вложенный элемент age
    var age = tom.Element("age");
    if (age != null) age.Value = "22";

    xdoc.Save("people.xml");
}

// выводим xml-документ на консоль
Console.WriteLine(xdoc);

В результате сформируется и сохранится на диск новый документ:

<people>
  <person name="Tomas">
    <company>Microsoft</company>
    <age>22</age>
  </person>
  <person name="Bob">
    <company>Google</company>
    <age>41</age>
  </person>
  <person name="Sam">
    <company>JetBrains</company>
    <age>28</age>
  </person>
</people>

Удаление данных

Для удаления данных в документе xml у удаляемого объекта XElement вызывается метод Remove(). Например, удалим элемент person, в котором атрибут name = "Bob":


using System.Xml.Linq;

XDocument xdoc = XDocument.Load("people.xml");
XElement? root = xdoc.Element("people");

if (root != null)
{
    // получим элемент person с name = "Bob"
    var bob = root.Elements("person")
        .FirstOrDefault(p => p.Attribute("name")?.Value == "Bob");
    // и удалим его
    if (bob != null)
    {
        bob.Remove();
        xdoc.Save("people.xml");
    }
}

// выводим xml-документ на консоль
Console.WriteLine(xdoc);

В результате сформируется и сохранится на диск новый документ:

<people>
  <person name="Tomas">
    <company>Microsoft</company>
    <age>22</age>
  </person>
  <person name="Sam">
    <company>JetBrains</company>
    <age>28</age>
  </person>
</people>

Соответственно, если необходимо удалить атрибут, то у удаляемого объекта XAttribute также вызывается метод Remove.

Проверь себя

📋 Тест по теме «Изменение документа в LINQ to XML» Тест по теме

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

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

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

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

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

using System._____.Linq;

XDocument xdoc = XDocument.Load("people.xml");
XElement? root = xdoc.Element("people");

if(root != null)
{
    // добавляем новый элемент
    root.Add(new XElement("person",
                new XAttribute("name", "Sam"),
                new XElement("company", "JetBrains"),
                new XElement("age", 28)));

    xdoc.Save("people.xml");
}

// выводим xml-документ на консоль
Console.WriteLine(xdoc);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

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

using System.Xml._____;

XDocument xdoc = XDocument.Load("people.xml");

// получим элемент person с name = "Tom"
var tom = xdoc.Element("people")?
    .Elements("person")
    .FirstOrDefault(p => p.Attribute("name")?.Value == "Tom");

if(tom != null)
{
    //  меняем атрибут name
    var name = tom.Attribute("name");
    if (name != null) name.Value = "Tomas";


    //  меняем вложенный элемент age
    var age = tom.Element("age");
    if (age != null) age.Value = "22";

    xdoc.Save("people.xml");
}

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

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

using System.Xml.Linq;

_____ xdoc = XDocument.Load("people.xml");
XElement? root = xdoc.Element("people");

if (root != null)
{
    // получим элемент person с name = "Bob"
    var bob = root.Elements("person")
        .FirstOrDefault(p => p.Attribute("name")?.Value == "Bob");
    // и удалим его
    if (bob != null)
    {
        bob.Remove();
        xdoc.Save("people.xml");
    }
}

// выводим xml-документ на консоль
Console.WriteLine(xdoc);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (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).

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

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

using System.Xml.Linq;

XDocument xdoc = XDocument.Load("people.xml");
XElement? _____ = xdoc.Element("people");

if(root != null)
{
    // добавляем новый элемент
    root.Add(new XElement("person",
                new XAttribute("_____", "Sam"),
                new XElement("company", "JetBrains"),
                new XElement("age", 28)));

    xdoc.Save("people.xml");
}

// выводим xml-документ на консоль
Console.WriteLine(xdoc);
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Изменение документа в LINQ to XML»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Изменение документа в LINQ to 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>
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Изменение документа в LINQ to XML»
+30 XP

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

using System.Xml.Linq;

XDocument xdoc = XDocument.Load("people.xml");
XElement? root = xdoc.Element("people");

if(root != null)
{
    // добавляем новый элемент
    root.Add(new XElement("person",
                new XAttribute("name", "Sam"),
                new XElement("company", "JetBrains"),
                new XElement("age", 28)));

    xdoc.Save("people.xml");
}

// выводим xml-документ на консоль
Console.WriteLine(xdoc);
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Изменение документа в LINQ to XML»
+50 XP

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

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

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

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

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

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