C# для профессионалов. Том II | страница 20
>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
используется свойство