Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сериализация, XML.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
928.26 Кб
Скачать

Класс XmlDocument

Класс XmlDocument представляет корень документа в объектном представлении документа.

Использование объектной модели документа

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

Запись xml документа

static void Main()

{

XmlDocument doc = new XmlDocument();

doc.LoadXml("<books> </books>");

XmlElement book = doc.CreateElement("book");

XmlElement title = doc.CreateElement("title");

title.InnerText = ".NET Framework Programming";

XmlElement author = doc.CreateElement("author");

author.InnerText = "Jeffrey Richter";

XmlElement price = doc.CreateElement("price");

price.SetAttribute("format","euros");

price.InnerText="39.99";

book.AppendChild(title);

book.AppendChild(author);

book.AppendChild(price);

doc.DocumentElement.AppendChild(book);

doc.Save("books.xml");

}

Из строки загружается XML документ содержащий один корневой элемент <books>. Создаётся элемент <book> для книги. Создаются три элемента <title>, <author> и <price>. Для каждого из трёх элементов задаётся текст внутри элемента. У элемента <price> объявляется атрибут format его значение "euros". Все три элемента добавляются в элемент <book>. Который в свою очередь добавляется в корневой элемент <books>. Полученная объектное представление документа записывается в файл.

Получившийся XML документ:

<books>

<book>

  <title>.NET Framework Programming</title>

  <author>Jeffrey Richter</author>

  <price format="euros">39.99</price>

  </book>

</books>

Чтение xml документа

Функция работает рекурсивно. Она получает список узлов и последовательно их обрабатывает. Для каждого узла определяется тип. В зависимости от типа узла получается разная информация об узле. Информация записывается в изменяемую строку символов. После определения типа узла и получения информации об узле проверяется есть ли у узла атрибуты. Если у узла есть атрибуты то информация о каждом из них записывается в изменяемую строку. Затем проверяется есть ли у узла потомки. Если у узла есть потомки то для каждого из них функция вызывает сама себя. Возвращаемые значения добавляются в изменяемую строку символов. В конце получившаяся изменяемая строка превращается в обычную строку которая возвращается функцией.

private static string ReadXML(XmlNodeList nodeList)

{

StringBuilder str = new StringBuilder();

foreach (XmlNode node in nodeList)

{

switch (node.NodeType)

{

case XmlNodeType.XmlDeclaration:

str.AppendFormat("Объявление XML : {0} {1} \n", node.Name, node.Value);

break;

case XmlNodeType.Element:

str.AppendFormat("Элемент: {0} \n",node.Name);

break;

case XmlNodeType.Text:

str.AppendFormat(" Значение: {0} \n",node.Value);

break;

case XmlNodeType.Comment:

str.AppendFormat("Комментарий: {0} \n", node.Value);

break;

}

if (node.Attributes != null)

{

foreach (XmlAttribute attrib in node.Attributes)

str.AppendFormat(" Атрибут: {0} Значение: {1} \n",attrib.Name, attrib.Value)

}

if (node.HasChildNodes)

{

str.Append(ReadXML(node.ChildNodes));

}

return str.ToString();

}