Udostępnij za pośrednictwem


Wykonywanie zapytań xml za pomocą wyrażenia XPath w visual C#

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

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 nazw biblioteki klas programu Microsoft .NET Framework. System.Xml.XPath

Dotyczy: Visual Studio, .NET Framework

Oryginalny numer KB: 308333

Wymagania wstępne

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ń XPathDocument z wyrażeniem XPath

  1. W programie Microsoft Visual Studio utwórz aplikację konsolową programu Visual C#.

    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 zawartego w przewodniku szybkiego startu .NET Software Development Kit (SDK).

    Jeśli nie masz zainstalowanego przewodnika szybkiego startu i nie chcesz go instalować, zapoznaj się z sekcją "Powiązana zawartość", aby znaleźć lokalizację pobierania Books.xml.

    Jeśli masz zainstalowane przewodniki szybkiego startu, plik Books.xml można znaleźć w folderze Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB. Plik można skopiować do \Bin\Debug podfolderu folderu, w którym utworzono 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 do funkcji Main w Class1.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Załaduj XPathDocument wraz 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ć pełne informacje na temat składni XPath, zobacz Składnia XPath w sekcji "Referencje".

    // 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 XPathNodeIterator dla węzłów wybranych przy użyciu metody Select z 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. Aby przejść przez wybrane węzły, użyj XPathNodeIterator, który został zwrócony z metody SelectXPathNavigator. W takim przypadku można użyć metody MoveNext w XPathNodeIterator, aby iterować po 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ć wyniki z poprzednich kroków.

    // 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:

An unhandled exception of type System.Xml.XmlException occurred in System.xml.dll  
Additional information: System error.

Ten wyjątek występuje w następującym wierszu kodu:

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

Błąd 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.