DOM — Объектная модель документа для работы с XML файлами

DOM часть первая

В состав библиотеки базовых классов (BCL) платформы .NET Framework входит сборка System.Xml.dll, в которой хранится реализация технологии DOM.

XML DOM (Document Object Model)

DOM (Объектная модель документа) — это не зависящий от платформы и языка интерфейс, который позволяет получать доступ к XML файлам, изменять их структуру и содержимое.

Представляет содержимое файла XML в виде дерева узлов хранимое в памяти компьютера.

Принцип работы DOM

Для начала работы необходимо подключить в свой проект пространство имён: System.XML. Обычно оно подключается автоматически при создании проекта.

system.xml

Основная работа с XML файлами осуществляться благодаря dll сборке System.Xml, которая предоставляет для работы с DOM все необходимые типы и члены.

Создание файла XML

Вне зависимости от типа задачи, любая работа с DOM, начинается с построения виртуального файла XML в памяти компьютера, точнее сказать каркаса будущего файла. В платформе .NET данную задачу решает класс XMLDocument. Для этого необходимо создать объект данного класса.

XmlDocument xmlDoc = new XmlDocument();

Открытие файла XML

После того, как виртуальный файл (каркас) создан. Можно перейти к работе с физическим файлом XML. Физический файл — это файл, который храниться на жёстком диске. Для работы с физическим файлом, применяется метод Load(), всё того же класса XMLDocument.

Load();

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

Пример создания создания виртуального файла.

using System;
using System.Xml;
using System.IO;
namespace Lessons
{
class Auto
{
static void Main()
{
string xmlPath = @"C:\lessons\auto.xml";
//Создание файла в памяти
XmlDocument xmlDoc = new XmlDocument();
if (File.Exists(xmlPath))
{
//загружаем данные из физического файла
xmlDoc.Load(xmlPath);
}
}
}
}

После того, как был создан виртуальный файл в памяти компьютера, Вы можете начать работать с ним, как с обычным физическим файлом. То есть выполнять любые обычные операции: добавлять, изменять, удалять данные в файле XML и многое другое.

При этом надо помнить, что все изменения затрагивать виртуальный файл, а не физический!

Сохранение в XML файл

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

Save();

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

using System;
using System.Xml;
using System.IO;
namespace Lessons
{
class Auto
{
static void Main()
{
string xmlPath = @"C:\lessons\auto.xml";
XmlDocument xmlDoc = new XmlDocument();
if (File.Exists(xmlPath))
{
xmlDoc.Load(xmlPath);
//Выполняем, какие-нибудь действия...
}
 xmlDoc.Save(xmlPath);
}
}
}

Принцип работы:

XmlDocument

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

Узлы (Node)

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

<garage>
 <car>
<model>Mazda</model>
<year>2007</year>
</car>
<car>
<model>BMW</model>
<year>2009</year>
</car>
</garage>

Весь XML файл – это один объект, который можно представить в виде дерева узлов. Под узлом можно понимать любое содержимое файла XML, будь-то декларация, комментарий, элементы и другое. То есть нужно запомнить, что к чему бы мы не обращались в XML файле, с точки зрения DOM, будет являться узлом (Node). Один узёл может содержать любое количество элементов.

Если наш, выше описанный пример, представить в виде дерева, то получим следующее:

DOM

Типы узлов

Дерево представляет собой столб, под которым подразумевается корневой (root) элемент, в нашем случаи – это элемент “garage”. Все узлы крепятся к данному столбу, как ветки у дерева. Так как узлов может быть много, они делятся на типы, вот некоторые из них:

DOCUMENT документ document
ELEMENT элемент <car> </car>
ATTRIBUTE атрибут элемента id=&#034;1&#034;
TEXT текстовый узел текст
COMMENT комментарий <!&#8212;пыщ-пыщ &#8212;>

В .NET Framework, для получения типа узла применяется класс Xml Node Type. А в свою очередь, для каждого типа есть свой класс для работы с ним.

Типы узлов и классы для работы с ними

Xml Node Type
.NET Framework Class
Document XmlDocument
Document Type XmlDocumentType
Element XmlElement
Attribute XmlAttribute
Text XmlText
Entity XmlEntity
Comment XmlComment

Корневой элемент

Как упоминалось ранее, корневой элемент является столбом, к которому крепятся узлы.

Для того, чтобы научиться передвигаться по дереву, необходимо для начала получить в нашем коде root-элемент, от которого мы будем отталкиваться, для достижения нужного узла.

Получение корневого элемента:

using System;
using System.Xml;
using System.IO;
namespace Lessons
{
class Auto
{
static void Main()
{
string xmlPath = @"C:\lessons\auto.xml";
XmlDocument xmlDoc = new XmlDocument();
if (File.Exists(xmlPath))
{
xmlDoc.Load(xmlPath); 
//корневой элемент
XmlElement elmRoot = xmlDoc.DocumentElement;
Console.WriteLine(elmRoot.Name);
}
}
}
}

В результате выполнения данного кода, на экран будет выведено слово &#171;garage&#187;, которое является именем нашего root-элемента. То есть доступ к корневому элементу был получен, и теперь отталкиваясь от этой точки, мы может перемещаться по дереву и получать нужные нам данные, а так же добавлять новые узлы в наше дерево, но об этом более подробно в следующей статье.

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

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*