Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как запрашивать XPathDocument
объект с выражением языка XML-пути (XPath) с помощью XPathNavigator
класса.
Исходная версия продукта: Visual Studio, платформа .NET Framework
Исходный номер базы знаний: 308333
Итоги
XPath используется программным способом для вычисления выражений и выбора определенных узлов в документе.
Эта статья относится к пространству System.Xml.XPath
имен библиотеки классов Microsoft платформа .NET Framework.
В этой статье предполагается, что вы знакомы со следующими разделами:
- Visual C#
- Терминология XML
- Создание и чтение XML-файла
- Синтаксис XPath
Запрос XML с выражением XPath
Создайте консольное приложение Visual C# в Visual Studio.
Примечание.
- В этом примере используется файл с именем Books.xml. Вы можете создать собственный файл Books.xml или использовать пример, включенный в краткие руководства по пакету sdk для .NET. Если вы не установили краткие руководства и не хотите устанавливать их, см . раздел "Ссылки " для расположения загрузки Books.xml. Если у вас установлены краткие руководства, файл можно найти в
Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB
папке. Файл можно скопировать\Bin\Debug
в папку, расположенную под папкой, в которой вы создали этот проект.
- В этом примере используется файл с именем Books.xml. Вы можете создать собственный файл Books.xml или использовать пример, включенный в краткие руководства по пакету sdk для .NET. Если вы не установили краткие руководства и не хотите устанавливать их, см . раздел "Ссылки " для расположения загрузки Books.xml. Если у вас установлены краткие руководства, файл можно найти в
Убедитесь, что проект ссылается на
System.Xml
пространство имен.Используйте инструкцию
using
вXml
пространствах имен иXPath
пространствах имен, чтобы не требуется квалифицировать объявления в этих пространствах имен позже в коде. Инструкциюusing
можно использовать перед любыми другими объявлениями следующим образом:using System.Xml; using System.Xml.XPath;
Объявите соответствующие переменные. Объявите
XPathDocument
объект для хранения XML-документа,XpathNavigator
объекта для оценки выражений XPath иXPathNodeIterator
объекта для итерации через выбранные узлы. Объявите объект для хранения выраженийString
XPath. Добавьте код объявления в функцию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();
Выполните сборку проекта и запустите его.
Примечание.
Результаты выводятся в окне консоли.
Устранение неполадок
При тестировании кода может появиться следующее сообщение об ошибке исключения:
Необработанное исключение типа System.Xml.XmlException произошло в System.xml.dll
Дополнительные сведения: системная ошибка.
Ошибка исключения возникает в следующей строке кода:
docNav = new XPathDocument("c:\\books.xml");
Ошибка исключения вызвана недопустимой инструкцией обработки. Например, инструкция обработки может содержать лишние пробелы. В следующем примере приведена недопустимая инструкция обработки:
<?xml version='1.0' ?>
Чтобы устранить исключение, используйте одно из следующих разрешений:
Исправьте недопустимую инструкцию по обработке. В следующем примере приведена допустимая инструкция по обработке:
<?xml version='1.0'?>
Удалите инструкцию по обработке XML из файла Books.xml.