XML в С# Урок 3. XmlDocument

.NET XML   19 июля 2012  Автор статьи:  

В данной статье рассмотрим еще один способ работы с XML документами. Класс XmlDocument реализует интерфейс XML DOM Level 2 Core. Данный способ обработки XML файла является более гибким, чем рассмотренные в предыдущим уроке. Он рассматривает все элементы как узлы, позволяя читать и писать в Xml документ. Обратимся к примеру из предыдущего урока:




1500

Alex



Как говорилось, корнем данного дерева является:



Для того, чтобы получить его сыновей используется свойство ChildNodes. В данном примере оно будет содержать два узла: комментарий и университет. Рекурсивно спускаясь по этому дереву, можно получить все его элементы. Для обхода всех узлов реализуем функцию GetChild:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace XMLPresentation
{
class Program
{
public static string GetChild(XmlNodeList nodeList)
{
StringBuilder str = new StringBuilder();//строка ответа
foreach (XmlNode node in nodeList)//пробежимся по всем сыновьям
{
switch (node.NodeType)
{
case XmlNodeType.XmlDeclaration:
str.Append("XML Declaration:");
str.AppendLine(node.Name + " " + node.Value);
break;
case XmlNodeType.Element:
str.Append("Element:");
str.AppendLine(node.Name);
break;
case XmlNodeType.Text:
str.AppendLine(node.Value);
break;
case XmlNodeType.Comment:
str.Append("Comment: ");
str.AppendLine(node.Value);
break;
}
if (node.Attributes != null)
{//пройдемся по атрибутам
foreach (XmlAttribute atr in node.Attributes)
{
str.AppendLine(atr.Name+" "+atr.Value);
}
}
if (node.HasChildNodes)
{//если есть дети, то рекурсивно добавим их
str.AppendLine(GetChild(node.ChildNodes));
}
}
return str.ToString();
}
static void Main(string[] args)
{
string path = @"C:\Users\LordRP\Desktop\1.xml";//путь до файла
XmlDocument doc = new XmlDocument();
doc.Load(path);
Console.WriteLine(GetChild(doc.ChildNodes));
}
}
}

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

node.Value="Новое Значение";

Если запустить приведенный выше код на нашем Xml файле, то получите следующий результат:
XML Declaration:xml version=»1.0″
Comment: Это комментарий
Element:university
ID 64
Name SSU
Element:StudentCount
1500

Element:department
Name CSIT
Element:Student
Alex

Таким образом XmlDocument позволяет перемещаться по Xml документу, как по дереву, что позволит быстрее добраться до интересующего вас объекта. Такое поведение может понадобиться, если вам нужны только определенные объекты и нет смысла перебирать и обрабатывать все, как это было в предыдущих уроках. Такая гибкость в обработки Xml возникает из — за того, что весь Xml файл начинает храниться в памяти. Это может сказаться на производительности, если ваш Xml документ достаточно большой, но зато позволит параллельно обращаться к нему нескольким пользователям одновременно. Предыдущий подход имел плюсы при последовательной обработки данных, т.е он не помещал весь файл в память, а обрабатывал его поточно, что уменьшало нагрузку на память. В следующем уроке мы рассмотрим еще один вариант работы с Xml файлами.

Научиться программировать

  • на Delphi

  • на Java

  • на C++