XML DOM 2

В предыдущей статье были описаны общие понятия касающиеся XML. В этой статье научимся выполнять основные действия, связанные с изменением, добавлением, поиском в XML файле.

XML файл, который используется для примера.

xml dom

В данный момент, наш файл содержит следующую структуру:

 

dom

DOM

Взаимоотношение между узлами в XML DOM, основные моменты:

1. Любой узел в DOM дереве имеет родителя ParentNode. В нашем примере garage является родителем для обоих элементов car, а оба элемента car, являются в свою очередь родителями для элементов: model и year.

Как получить родителя для xml элемента car?

2. У родителя могут быть дети ChildNodes. Например, для узла garage детьми являются оба элемента car. У элементов car, тоже есть дети model и year.

ChildNodes, представляет собой коллекцию, которая хранит все дочерние xml элементы, чтобы обратиться к нужному элементу, нужно указать его индекс. (Индекс всегда начинается с нуля!)

Например: как получить первый дочерний элемент?

3. Как и в обычной жизни ребенок может родиться первым FirstChild, или последним LastChild.

Если взять для примера элемент car, то

4. В свою очередь между дочерними элементами тоже существуют связи, они могут быть братьями или сестрами, если проводить параллели с реальной жизнью.

У ребенка может быть к примеру брат Previous Sibling и следующий брат Next Sibling

Если элемент не найден, то тогда возникает исключение: NullReferenceException, поэтому при работе с xml всегда используйте блоки try catch.

LastChild является NextSibling;
FirstChild является PreviousSibling;

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

Как получить значение xml элемента?

Значение xml элемента можно получить при помощи свойства InnerText, например:

Ещё один способ, чтобы получить это же значение xml элемента:

Последовательность перемещений по DOM дереву:

Получаем год:

Последовательность:

Ещё пример: 3 способа, для получения одного и того же результата.

Если надо получить год для элемента со значением Mazda:

Для BMW (два способа, получить один и тот же результат)

Как изменить значения xml элемента?

С помощью свойства InnerText() можно, как получить, так и изменить значение xml элемента, например изменим год.

При этом нужно помнить, что все изменения происходят с виртуальным xml файлом, если Вы откроете физический файл, то увидите, что по-прежнему в нём указан год 2007.

Для того, чтобы изменения вступили в силу, нужно воспользоваться методом Save, например:

Теперь информация будет изменена в «физическом» xml файле.

Как получить количество дочерних элементов?

garage -> car содержит 2 ребенка: model и year
garage -> car -> model содержит 1 дочерний xml элемент.

Обращение к дочерним элементам

по индексу

С помощью цикла

Как получить имя xml элемента?

Создание нового XML элемента

Создадим новый элемент в нашем XML документе, чтобы он отличался от двух других (car) назовём его автобус (bus).

При создании нового элемента воспользуемся рекомендацией с сайта msdn и вместо стандартного new XmlElement воспользуемся методом CreateElement.

Создание и добавление нового xml элемента

Создадим новый xml элемент по имени «BUS».

Пояснение:

1. Сначала получаем root-элемент к которому будем крепить новые элементы.

2. В качестве проверки выведем текущее количество дочерних элементов у элемента garage: 2 (car и car)

3. Создаем новый элемент BUS

4. При помощи метода AppendChild добавляем новый элемент в дерево

5. Снова воспользуемся проверкой и выведем текущее количество элементов у элемента garage, теперь их стало 3: car, car, bus.

6. Чтобы изменения затронули физический файл, сохраняемся

В самом XML файле новый элемент будет выглядеть так:

Как добавить новый xml элемент?

Задача: создать новый XML элемент и добавить в него какое-нибудь текстовое содержимое, например год выпуска.

В XML файле:

Для наглядности

Добавление нового XML элемента

А теперь создадим узел «bus», с такой же архитектурой, как и car, то есть добавим узлы: model, year и какое-нибудь текстовое содержимое.

Создание XML элемента с дочерними элементами

Результат:
Как можно сократить, данный код? Например, следующим образом:
Ещё немного сократим код, для этого воспользуемся свойством InnerXml:
Результат

Создание XML элемента

Получить список элементов при помощи GetElementByTagName

GetElementByTagName возвращает XmlNodeList, в котором содержаться все элементы потомки, принадлежащие указному элементу, например, нам нужно получить все модели машин, которые хранятся в гараже:

Обращение при помощи индекса:

Как изменить текстовое содержимое, у только что созданного элемента «bus», при помощи метода GetElementByTagName?

Либо можно изменить имя liaz на Ikarus

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

Похожие темы

Удаление узла в xml документе... Как удалить узел в xml документе? В этой небольшой заметке хочу показать Вам, как удалить узел в xml документе с помощью технологии Linq to XML. И...
Как добавить XML файл в Solution Explorer... Как добавить XML файл в проект В окне Solution Explorer нажмите правую кнопку мыши на имени текущего проекта. В появившемся контекстном меню выберите...
У меня не открывается xml файл, что делать?... Что делать, если не удается открыть xml файл? В этой статье хотелось бы рассмотреть некоторые причины, из-за которых очень часто не удается открыть x...
c# Загрузка XML файла Как загрузить xml файл? Для работы с xml файлами существует большое количество разнообразных классов. В этой статье рассмотрим, как выполняется загру...
c# Как добавить xml узел ? Как добавить новый узел в xml документе? Продолжаем работу с технологией Linq to XML и сегодня Вы узнаете, как добавить xml узел в xml документе. До...