Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как выполнить запрос к объекту XPathDocument с помощью выражения XPath и класса XPathNavigator.
XPath используется программным способом для вычисления выражений и выбора определенных узлов в документе.
Эта статья относится к пространству имен System.Xml.XPath библиотеки классов Microsoft .NET Framework.
Применимо к: Visual Studio, .NET Framework
Исходный номер базы знаний: 308333
Предпосылки
В этой статье предполагается, что вы знакомы со следующими разделами:
- Visual C#
- Терминология XML
- Создание и чтение XML-файла
- Синтаксис XPath
Запрос к XPathDocument, используя выражение XPath
В Microsoft Visual Studio создайте консольное приложение Visual C#.
Примечание.
В этом примере используется файл с именем Books.xml. Вы можете создать собственный файл Books.xml или использовать пример, включенный в краткие руководства по пакету средств разработки программного обеспечения .NET (SDK).
Если у вас нет установленных быстрых инструкций и вы не хотите их устанавливать, см. раздел "Связанное содержимое" для места загрузки Books.xml.
Если у вас установлены быстрые старты, файл Books.xml можно найти в папке
Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB. Файл можно скопировать в\Bin\Debugвложенную папку папки, в которой вы создали этот проект.Убедитесь, что проект ссылается на
System.Xmlпространство имен.Используйте инструкцию
usingвXmlпространствах имен иXPathпространствах имен, чтобы не требуется квалифицировать объявления в этих пространствах имен позже в коде. Инструкциюusingможно использовать перед любыми другими объявлениями следующим образом:using System.Xml; using System.Xml.XPath;Объявите соответствующие переменные. Объявите
XPathDocumentобъект для хранения XML-документа,XpathNavigatorобъекта для оценки выражений XPath иXPathNodeIteratorобъекта для итерации через выбранные узлы. Объявите объект для хранения выраженийStringXPath. Добавьте код объявления в функциюMain, находящуюся вClass1.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;Загрузите элемент
XPathDocumentи файл с примером Books.xml. КлассXPathDocumentиспользует расширяемые преобразования языка таблицы стилей (XSLT) для обеспечения быстрого и производительно ориентированного кэша для обработки XML-документов. Она похожа на объектную модель XML-документа (DOM), но оптимизирована для обработки XSLT иXPathмодели данных.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");Создайте из
XPathNavigatorдокумента. ОбъектXPathNavigatorиспользуется для запросов XPath только для чтения. Запросы XPath могут возвращать результирующее значение или многие узлы.// Create a navigator to query with XPath. nav = docNav.CreateNavigator();Создайте выражение XPath для поиска средней стоимости книги. Это выражение XPath возвращает одно значение. Полные сведения о синтаксисе XPath см. в разделе "Ссылки".
// Find the average cost of a book. // This expression uses standard XPath syntax. strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";EvaluateИспользуйте методXPathNavigatorобъекта для вычисления выражения XPath. МетодEvaluateвозвращает результаты выражения.// Use the Evaluate method to return the evaluated expression. Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));Создайте выражение XPath, чтобы найти все книги, которые стоят более 10 долларов. Это выражение XPath возвращает только узлы Title из источника XML.
// Find the title of the books that are greater then $10.00. strExpression = "/bookstore/book/title[../price>10.00]";Создайте
XPathNodeIteratorдля узлов, которые выбраны вместе с методомSelectизXPathNavigator. ПредставляетXPathNodeIteratorнабор узлов XPath и поддерживает операции с этим набором узлов.// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);Для перемещения по выбранным узлам используйте
XPathNodeIterator, который был возвращён методомSelectизXPathNavigator. В этом случае можно использовать методMoveNextизXPathNodeIterator, чтобы проходить по всем выбранным узлам.Console.WriteLine("List of expensive books:"); //Iterate through the results showing the element value. while (NodeIter.MoveNext()) { Console.WriteLine("Book Title: {0}", NodeIter.Current.Value); };ReadLineИспользуйте метод, чтобы добавить паузу в конце экрана консоли, чтобы легко отобразить результаты из предыдущих шагов.// Pause Console.ReadLine();Выполните сборку проекта и запустите его.
Примечание.
Результаты выводятся в окне консоли.
Устранение неполадок
При тестировании кода может появиться следующее сообщение об ошибке исключения:
An unhandled exception of type System.Xml.XmlException occurred in System.xml.dll
Additional information: System error.
Это исключение возникает в следующей строке кода:
docNav = new XPathDocument("c:\\books.xml");
Ошибка вызвана недопустимой инструкцией обработки. Например, инструкция обработки может содержать лишние пробелы. В следующем примере приведена недопустимая инструкция обработки:
<?xml version='1.0' ?>
Чтобы устранить исключение, используйте одно из следующих разрешений:
Исправьте недопустимую инструкцию по обработке. В следующем примере приведена допустимая инструкция по обработке:
<?xml version='1.0'?>Удалите инструкцию по обработке XML из файла Books.xml.