Использование 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

  1. Создание консольного приложения 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 , расположенную под папкой, в которой создан этот проект.
  2. Убедитесь, что проект ссылается на System.Xml пространство имен.

  3. Используйте инструкцию using для Xml пространств имен и XPath , чтобы не требовалось квалифицировать объявления в этих пространствах имен позже в коде. Оператор можно использовать using перед любыми другими объявлениями следующим образом:

    using System.Xml;
    using System.Xml.XPath;
    
  4. Объявите соответствующие переменные. Объявите XPathDocument объект для хранения XML-документа, XpathNavigator объект для вычисления выражений XPathNodeIterator XPath и объект для итерации по выбранным узлам. Объявите String объект для хранения выражений XPath. Добавьте код объявления в функцию Main в Class1.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. XPathDocument Загрузите с примером файла Books.xml. Класс XPathDocument использует расширяемые преобразования языка таблиц стилей (XSLT), чтобы обеспечить быстрый и ориентированный на производительность кэш для обработки XML-документов. Она похожа на объектную модель xml-документов (DOM), но хорошо оптимизирована для обработки XSLT и XPath модели данных.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Создайте объект XPathNavigator из документа. Объект XPathNavigator используется для запросов XPath только для чтения. Запросы XPath могут возвращать результирующее значение или несколько узлов.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. Создайте выражение 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)";
    
  8. 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));
    
  9. Создайте выражение XPath, чтобы найти все книги, стоимостью более 10 долларов. Это выражение XPath возвращает только узлы Title из источника XML.

    // Find the title of the books that are greater then $10.00.
    strExpression = "/bookstore/book/title[../price>10.00]";
    
  10. XPathNodeIterator Создайте для узлов, выбранных с помощью Select метода XPathNavigator. Представляет XPathNodeIterator набор узлов XPath и поддерживает операции с этим набором узлов.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. 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);
    };
    
  12. ReadLine Используйте метод , чтобы добавить паузу в конце экрана консоли, чтобы быстрее отобразить приведенные выше результаты.

    // Pause
    Console.ReadLine();
    
  13. Выполните сборку и запуск проекта.

    Примечание.

    Результаты отображаются в окне консоли.

Устранение неполадок

При тестировании кода может появилось следующее сообщение об ошибке исключения:

Необработанное исключение типа System.Xml. XmlException произошло в System.xml.dll
Дополнительные сведения: Системная ошибка.

Ошибка исключения возникает в следующей строке кода:

docNav = new XPathDocument("c:\\books.xml");

Ошибка исключения вызвана недопустимой инструкцией обработки. Например, инструкция по обработке может содержать лишние пробелы. В следующем примере показана недопустимая инструкция по обработке:

<?xml version='1.0' ?>

Чтобы устранить исключение, используйте одно из следующих решений:

  • Исправьте недопустимую инструкцию по обработке. Ниже приведен пример допустимой инструкции по обработке:

    <?xml version='1.0'?>
    
  • Удалите инструкцию по обработке XML из файла Books.xml.

Ссылки