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


Использование Visual C# для запроса XML с выражением XPath

В этой статье описывается, как запрашивать XPathDocument объект с выражением языка XML-пути (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 объекта для оценки выражений 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. Выполните сборку проекта и запустите его.

    Примечание.

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

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

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

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

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

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

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

<?xml version='1.0' ?>

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

  • Исправьте недопустимую инструкцию по обработке. В следующем примере приведена допустимая инструкция по обработке:

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

Ссылки