C# для профессионалов. Том II | страница 20



. Используется >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 используется свойство