Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:
XPath

Пространство имен

XPath
создается для скорости. Оно позволяет только читать документы XML без возможностей редактирования.
XPath
создается для поверхностного выполнения быстрых итераций и выбора в документе XML. Функциональность
XPath
представляется классом
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
и загружаем окно списка именами и значениями элементов.

  • Читать дальше
  • 1
  • ...
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: