XML в С# Урок 4. XpathNavigator

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

Несколько особняком стоит класс XpathNavigator. Он использует тот же подход, что и XmlDocument, но позиционируется только на одном узле одновременно. XpathNavigator находится в пространстве имен System.Xml.XPath. Его объект можно создать с помощью объекта XmlDocument, вызвав функцию CreateNavigator. Выведем содержимое нашего Xml документа с помощью XpathNavigator. Для этого перепишем функцию GetChild. Теперь в нее вместо списка узлов дерева мы будем передавать только наш курсор. Некоторые отличие есть и в реализации проверки типа элемента. Для XpathNavigator типы узлов отличаются XmlDocument и являются более компактными.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.XPath;
namespace XMLPresentation
{
class Program
{
public static string GetChild(XPathNavigator navigator)
{

StringBuilder str = new StringBuilder ();
//смотрим тип текущего элемента
switch(navigator.NodeType)
{
case XPathNodeType.Element:
str.AppendLine(navigator.Name);
break;
case XPathNodeType.Text:
str.AppendLine(navigator.Value);
break;
case XPathNodeType.Comment:
str.AppendLine(navigator.Value);
break;
}
//проверяем наличие атрибутов
if (navigator.HasAttributes)
{
while (navigator.MoveToFirstAttribute())
{
str.AppendLine(navigator.Name+" "+navigator.Value);
}
// Вернуться к родителю,
navigator.MoveToParent();
}
//если у узла есть дети, то перейдем к ним
if (navigator.HasChildren)
{
navigator.MoveToFirstChild();
do
{
str.AppendLine(GetChild(navigator));
} while (navigator.MoveToNext());
// Вернуться к родителю.
navigator.MoveToParent();
}
return str.ToString();
}

static void Main(string[] args)
{
string path = @"C:\Users\LordRP\Desktop\1.xml";//путь до файла
XmlDocument doc = new XmlDocument();
doc.Load(path);
XPathNavigator navigator = doc.CreateNavigator();
Console.WriteLine(GetChild(navigator));
}
}
}

После запуска программа выдаст информацию о узлах:
Это комментарий

university
ID 64
StudentCount
1500

department
Name CSIT
Student
Alex

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

  • на Delphi

  • на Java

  • на C++