Использование Visual C# для запроса XML с выражением XPath
В этой статье описывается, как запрашивать XPathDocument
объект с выражением 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
объект для вычисления выраженийXPathNodeIterator
XPath и объект для итерации по выбранным узлам. Объявите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 см. в разделе Синтаксис 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.
Ссылки
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по