Как удалить узел в xml документе?

В этой небольшой заметке хочу показать Вам, как удалить узел в xml документе с помощью технологии Linq to XML.

И так, для начала создадим и добавим в проект xml файл, который имеет следующую структуру:

Затем добавим строку, которая позволяет при работе с Linq to XML напрямую обращаться к типам, не указывая полных имен.

ключевое слово using

Удаление xml узла

В качестве первого примера рассмотрим, как удалить последний узел в xml документе.

Сначала с помощью метода Load загружаем xml файл и строим DOM дерево. Затем, с помощью метода Nodes, получаем коллекцию всех xml узлов, кроме корневого узла, которые содержаться в данном xml документе. После чего, используя метод расширения ElementAt, получаем доступ к элементам, полученной ранее коллекции. И с помощью метода Remove удаляем указанный xml узел.

Но, так же мы можем, удалить последний xml узел и, не перебирая и получая все узлы, а сразу же обратившись к нему с помощью свойства LastNode.

результат

удаление xml узла

Удаление узла с атрибутом

Во втором примере задача остаётся той же, что и в первом примере, но только в данном случаи мы будем удалять узел, зная значение его атрибута. Например, удалим xml узел, который имеет атрибут id со значение три.

В результате будет удалён третий (последний) узел в xml файле.

Удаление дочернего xml узла

Так же очень часто встречается задача, когда необходимо удалить дочерний узел в xml документе. Например, предположим, что нам необходимо удалить в созданном чуть ранее xml файле дочерний узел brothers.

атрибут xml узла

решение:

В данном примере сначала находим второй узел, а затем, используя операцию явного приведения и метод Remove, удаляем дочерний xml узел.

Обратиться ко второму узлу мы можем так же и, не используя метод Nodes, а например следующим образом:

результат

дочерний узел

Как удалить все узлы в xml файле?

И последний пример, в котором рассмотрим ситуацию, когда необходимо удалить все узлы в xml файле. Для решения данной задачи воспользуемся следующим решением:

В результате будут удалены все узлы в xml документе, кроме корневого узла!

xml файл

Если же Вам необходимо удалить абсолютно все узлы, то тогда воспользуйтесь следующим способом:

Update.

В данной статье, во многих приведенных примерах, используется явное и не явное приведение типа XNode к типу XElement, например:

Такой способ можно использовать только в том случаи, если Вы точно уверены, что все узлы в xml файле имеют тип XElement (элемент). Если же при переборе в цикле мы попадем на другой тип, например комментарий (XComment), то в таком случае произойдет выброс исключения.

Поэтому, если Вам необходимо получить все узлы только типа XElement, то в таком случае лучше всего воспользоваться методом Descendants, например:

Данный метод всегда возвращает только коллекцию элементов, что сразу избавляет нас от выше описанной проблемы.

Следующий пример так же приводит к возникновению исключения при тех же ранее описанных условиях:

Чтобы этого избежать, можно добавить следующую проверку:

На этом всё, если есть какие-то вопросы, то оставляйте их в комментариях.

Читайте также:

Похожие темы

DOM — Объектная модель документа для работы ... DOM часть первая В состав библиотеки базовых классов (BCL) платформы .NET Framework входит сборка System.Xml.dll, в которой хранится реализация техно...
Работа с элементом управления TreeView в языке c#... c# работа с элементом управления TreeView Для начала создадим Windows Forms приложение. После чего добавим на форму элемент управления TreeView, кото...
c# Как добавить xml узел ? Как добавить новый узел в xml документе? Продолжаем работу с технологией Linq to XML и сегодня Вы узнаете, как добавить xml узел в xml документе. До...
Чтение Xml файла с выводом данных в DataGridView в... Как выполнить чтение xml файла с выводом данных в DataGridView? В этой статье хочу показать на простом примере, как можно выполнить чтение xml файла ...
c# Загрузка XML файла Как загрузить xml файл? Для работы с xml файлами существует большое количество разнообразных классов. В этой статье рассмотрим, как выполняется загру...