Поделиться через


Запрос XML с выражением XPath в Visual C#

В этой статье описывается, как выполнить запрос к объекту XPathDocument с помощью выражения XPath и класса XPathNavigator.

XPath используется программным способом для вычисления выражений и выбора определенных узлов в документе.

Эта статья относится к пространству имен System.Xml.XPath библиотеки классов Microsoft .NET Framework.

Применимо к: Visual Studio, .NET Framework

Исходный номер базы знаний: 308333

Предпосылки

В этой статье предполагается, что вы знакомы со следующими разделами:

  • Visual C#
  • Терминология XML
  • Создание и чтение XML-файла
  • Синтаксис XPath

Запрос к XPathDocument, используя выражение XPath

  1. В 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 вложенную папку папки, в которой вы создали этот проект.

  2. Убедитесь, что проект ссылается на System.Xml пространство имен.

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

    using System.Xml;
    using System.Xml.XPath;
    
  4. Объявите соответствующие переменные. Объявите XPathDocument объект для хранения XML-документа, XpathNavigator объекта для оценки выражений XPath и XPathNodeIterator объекта для итерации через выбранные узлы. Объявите объект для хранения выражений 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 см. в разделе "Ссылки".

    // 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. Выполните сборку проекта и запустите его.

    Примечание.

    Результаты выводятся в окне консоли.

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

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

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.