Udostępnij za pośrednictwem


Wykonywanie zapytań XML za pomocą wyrażenia XPath za pomocą języka Visual C#

W tym artykule przedstawiono sposób wykonywania zapytań względem XPathDocument obiektu za pomocą wyrażenia języka XPath (XML Path Language) przy użyciu XPathNavigator klasy .

Oryginalna wersja produktu: Visual Studio, .NET Framework
Oryginalny numer KB: 308333

Podsumowanie

Funkcja XPath jest używana programowo do oceniania wyrażeń i wybierania określonych węzłów w dokumencie.

W tym artykule odwołuje się do przestrzeni System.Xml.XPathnazw biblioteki klas programu Microsoft .NET Framework.

W tym artykule założono, że znasz następujące tematy:

  • Visual C#
  • Terminologia XML
  • Tworzenie i odczytywanie pliku XML
  • Składnia XPath

Wykonywanie zapytań xml za pomocą wyrażenia XPath

  1. Utwórz nową aplikację konsolową Visual C# w programie Visual Studio.

    Uwaga 16.

    • W tym przykładzie użyto pliku o nazwie Books.xml. Możesz utworzyć własny plik Books.xml lub użyć przykładu dołączonego do przewodnika Szybki start zestawu .NET Software Development Kit (SDK). Jeśli nie masz zainstalowanych przewodników Szybki start i nie chcesz ich instalować, zobacz sekcję Odwołania dla lokalizacji pobierania Books.xml. Jeśli masz zainstalowane przewodniki Szybki start, plik można znaleźć w Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB folderze. Plik można skopiować do folderu znajdującego \Bin\Debug się w folderze, w którym został utworzony ten projekt.
  2. Upewnij się, że projekt odwołuje się do System.Xml przestrzeni nazw.

  3. Użyj instrukcji using w Xml przestrzeniach nazw i XPath , aby nie trzeba było kwalifikować deklaracji w tych przestrzeniach nazw w dalszej części kodu. Instrukcję using można użyć przed innymi deklaracjami w następujący sposób:

    using System.Xml;
    using System.Xml.XPath;
    
  4. Zadeklaruj odpowiednie zmienne. Zadeklaruj XPathDocument obiekt do przechowywania dokumentu XML, XpathNavigator obiektu do oceny wyrażeń XPath i XPathNodeIterator obiektu do iterowania przez wybrane węzły. Zadeklaruj String obiekt do przechowywania wyrażeń XPath. Dodaj kod deklaracji w Main funkcji w pliku Class1.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Załaduj plik XPathDocument z przykładowym plikiem Books.xml. Klasa XPathDocument używa rozszerzalnych przekształceń języka arkusza stylów (XSLT) w celu zapewnienia szybkiej i zorientowanej na wydajność pamięci podręcznej na potrzeby przetwarzania dokumentów XML. Jest on podobny do modelu DOM (XML Document Object Model), ale jest wysoce zoptymalizowany pod kątem XPath przetwarzania XSLT i modelu danych.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Utwórz element XPathNavigator na podstawie dokumentu. Obiekt XPathNavigator jest używany do zapytań XPath tylko do odczytu. Zapytania XPath mogą zwracać wynikową wartość lub wiele węzłów.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. Utwórz wyrażenie XPath, aby znaleźć średni koszt książki. To wyrażenie XPath zwraca pojedynczą wartość. Aby uzyskać szczegółowe informacje na temat składni XPath, zobacz Składnia XPath w sekcji Odwołania .

    // 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 Użyj metody XPathNavigator obiektu, aby ocenić wyrażenie XPath. Metoda Evaluate zwraca wyniki wyrażenia.

    // Use the Evaluate method to return the evaluated expression.
    Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
    
  9. Utwórz wyrażenie XPath, aby znaleźć wszystkie książki, które kosztują ponad 10 dolarów. To wyrażenie XPath zwraca tylko węzły Tytułu ze źródła XML.

    // Find the title of the books that are greater then $10.00.
    strExpression = "/bookstore/book/title[../price>10.00]";
    
  10. Utwórz element XPathNodeIterator dla węzłów wybranych za Select pomocą metody XPathNavigator. Obiekt XPathNodeIterator reprezentuje zestaw węzłów XPath i obsługuje operacje w tym zestawie węzłów.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. XPathNodeIteratorUżyj metody , która została zwrócona z Select metody XPathNavigator, aby przejść przez wybrane węzły. W takim przypadku można użyć MoveNext metody , XPathNodeIterator aby wykonać iterację we wszystkich wybranych węzłach.

    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 Użyj metody , aby dodać pauzę na końcu ekranu konsoli, aby bardziej łatwo wyświetlić powyższe wyniki.

    // Pause
    Console.ReadLine();
    
  13. Skompiluj i uruchom projekt.

    Uwaga 16.

    Wyniki są wyświetlane w oknie konsoli.

Rozwiązywanie problemów

Podczas testowania kodu może zostać wyświetlony następujący komunikat o błędzie wyjątku:

Wystąpił nieobsługiwany wyjątek typu System.Xml.XmlException w System.xml.dll
Dodatkowe informacje: Błąd systemu.

Błąd wyjątku występuje w następującym wierszu kodu:

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

Błąd wyjątku jest spowodowany nieprawidłową instrukcją przetwarzania. Na przykład instrukcja przetwarzania może zawierać dodatkowe spacje. Poniższy przykład to nieprawidłowa instrukcja przetwarzania:

<?xml version='1.0' ?>

Aby rozwiązać ten problem, użyj jednej z następujących rozwiązań:

  • Popraw nieprawidłową instrukcję przetwarzania. Poniższy przykład to prawidłowa instrukcja przetwarzania:

    <?xml version='1.0'?>
    
  • Usuń instrukcję przetwarzania XML z pliku Books.xml.

Informacje