представляется классом XPathNavigator. Этот класс может использоваться вместо XmlDocument, XmlDataDocument и XPathDocument. Если требуются средства редактирования, то следует выбрать XmlDocument; при работе с ADO.NET будет использоваться класс XmlDataDocument (мы увидим его позже в этой главе). Если имеет значение скорость, то применяйте в качестве хранилища XPathDocument. Можно расширить XPathNavigator для таких вещей, как файловая система или реестр в качестве хранилища. В следующей таблице перечислены классы XPath с кратким описанием назначения каждого класса:

Имя класса Описание
XPathDocument Представление всего документа XML. Только для чтения.
XPathNavigator Предоставляет навигационные возможности для XPathDocument.
XPathNodeIterator Обеспечивает итерацию по множеству узлов. Является эквивалентом для множества узлов в Xpath.
XPathExpression Компилированное выражение Xpath. Используется SelectNodes, SelectSingleNodes, Evaluate и Matches.
XPathException Класс исключений XPath.

XPathDocument не предлагает никакой функциональности класса XmlDocument. Он имеет четыре перегружаемые версии, позволяющие открывать документ XML из файла или строки пути доступа, объекта TextReader, объекта XmlReader или объекта на основе Stream.

Загрузим документ books.xml и поработаем с ним, чтобы можно было понять, как действует навигация. Чтобы использовать эти примеры, необходимо добавить ссылки на пространства имен System.Xml.Xsl и System.Xml.XPath следующим образом:

using System.Xml.XPath;

using System.Xml.Xsl;

Для данного примера воспользуемся файлом bookspath.xml. Он аналогичен books.xml, за исключением того, что добавлены дополнительные книги. Вот код формы, который находится в папке XPathXSLSample1:

private void button1_Click(object sender, System.EventArgs e) {

 // изменить в соответствии с используемой структурой путей доступа

 XPathDocument doc=new XPathDocument('..\..\..\booksxpath.xml');

 // создать XPathNavigator

 XPathNavigator nav=((IXPathNavigable)doc).CreateNavigator();

 // создать XPathNodeIterator узлов книг

 // который имеют значение атрибута genre, совпадающее с novel

 XPathNodeIterator iter=nav.Select('/bookstore/book[@genre='novel']');

 while(iter.MoveNext()) {

  LoadBook(iter.Current);

 }

}

private void LoadBook(XPathNavigator lstNav) {

 // Нам передали XPathNavigator определенного узла book,

 // мы выберем всех прямых потомков и

 // загрузим окно списка с именами и значениями

 XPathNodeIterator iterBook=lstNav.SelectDescendants(XPathNodeType.Element, false);

 while(iterBook.MoveNext())

listBox1.Items.Add(iterBook.Current.Name + ': ' + iterBook.Current.Value);

}

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

XPathNavigator nav=((IXPathNavigable)doc).CreateNavigator();

Отметим, что здесь происходит преобразование типа интерфейса IXPathNavigable в только что созданный XPathNavigator, что вызывает метод CreateNavigator. После создания объекта XPathNavigator можно начать навигацию в документе.

Этот пример показывает, как применяются методы Select для получения множества узлов, которые имеют novel в качестве значения атрибута genre. Затем мы используем цикл MoveNext() для итераций по всем novels в списке книг.

Для загрузки данных в listbox используется свойство XPathNodeIterator.Current. При этом создается новый объект XPathNavigator на основе узла, на который указывает XPathNodeIterator. В данном случае создается XPathNavigator для одного узла book (книги) в документе. LoadBook создает другой XPathNodeIterator, вызывая иной тип метода выбора — метод SelectDescendants. Это даст нам XPathNodeIterator всех узлов- потомков и потомков узлов-потомков узла book (книга), переданного в метод LoadBook. Мы делаем другой цикл MoveNext() на этом XPathNodeIterator и загружаем окно списка именами и значениями элементов.

XPathNavigator содержит все методы для перемещения и выбора элементов, которые могут понадобиться. Приведем некоторые из методов перемещения:

Имя метода Описание
MoveTo Получает в качестве параметра XPathNavigator. Делает текущей
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату