C# для профессионалов. Том II - [10]

Шрифт
Интервал

представляется классом >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. Делает текущей позицию, которая указана в >XPathNavigator.
>MoveToAttributeПеремещает к именованному атрибуту. Получает имя атрибута и пространство имен как параметры.
>MoveToFirstAttributeПеремещает к первому атрибуту текущего элемента. Возвращает >true, если выполняется успешно.
>MoveToNextAttributeПеремещает к следующему атрибуту текущего элемента. Возвращает >true, если выполняется успешно.
>MoveToFirstПеремещает к первому >sibling текущего узла. Возвращает >true, если выполняется успешно, в противном случае возвращает >false.
>MoveToLastПеремещает к последнему >sibling текущего узла. Возвращает >true, если выполняется успешно.
>MoveToNextПеремещает к следующему >sibling текущего узла. Возвращает >true, если выполняется успешно.
>MoveToPreviousПеремещает к предыдущему >sibling текущего узла. Возвращает >true, если выполняется успешно.
>MoveToFirstChildПеремещает к первому потомку текущего элемента. Возвращает >true, если выполняется успешно.
>MoveToIdПеремещает к элементу с идентификатором ID, предоставленным в виде параметра. Должна существовать схема документа и данные элемента типа ID.

Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Виртуальная библиотека Delphi

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


Обработка баз данных на Visual Basic.NET

Это практическое руководство разработчика программного обеспечения на Visual Basic .NET и ADO.NET, предназначенное для создания приложений баз данных на основе WinForms, Web-форм и Web-служб. В книге описываются практические способы решения задач доступа к данным, с которыми сталкиваются разработчики на Visual Basic .NET в своей повседневной деятельности. Книга начинается с основных сведений о создании баз данных, использовании языка структурированных запросов SQL и системы управления базами данных Microsoft SQL Server 2000.


Исчерпывающее руководство по написанию всплывающих подсказок

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


Программное обеспечение встроенных систем. Общие требования к разработке и документированию

Embedded system software. General requirements for development and documentationСтандарт подготовлен в развитие ГОСТ Р ИСО/МЭК 12207-99 «Информационная технология. Процессы жизненного цикла программных средств» с целью учета специфики разработки и документирования программного обеспечения встроенных систем реального времени.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.