Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
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\Debugpodfolderu folderu, w którym utworzono ten projekt.Upewnij się, że projekt odwołuje się do
System.Xmlprzestrzeni nazw.Użyj instrukcji
usingwXmlprzestrzeniach nazw iXPath, aby nie trzeba było kwalifikować deklaracji w tych przestrzeniach nazw w dalszej części kodu. Instrukcjęusingmożna użyć przed innymi deklaracjami w następujący sposób:using System.Xml; using System.Xml.XPath;Zadeklaruj odpowiednie zmienne. Zadeklaruj
XPathDocumentobiekt do przechowywania dokumentu XML,XpathNavigatorobiektu do oceny wyrażeń XPath iXPathNodeIteratorobiektu do iterowania przez wybrane węzły. ZadeklarujStringobiekt do przechowywania wyrażeń XPath. Dodaj kod deklaracji do funkcjiMainwClass1.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;Załaduj
XPathDocumentwraz z przykładowym plikiem Books.xml. KlasaXPathDocumentuż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ątemXPathprzetwarzania XSLT i modelu danych.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");Utwórz element
XPathNavigatorna podstawie dokumentu. ObiektXPathNavigatorjest 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();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)";EvaluateUżyj metodyXPathNavigatorobiektu, aby ocenić wyrażenie XPath. MetodaEvaluatezwraca 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));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]";Utwórz
XPathNodeIteratordla węzłów wybranych przy użyciu metodySelectzXPathNavigator. ObiektXPathNodeIteratorreprezentuje 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);Aby przejść przez wybrane węzły, użyj
XPathNodeIterator, który został zwrócony z metodySelectXPathNavigator. W takim przypadku można użyć metodyMoveNextwXPathNodeIterator, 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); };ReadLineUżyj metody , aby dodać pauzę na końcu ekranu konsoli, aby bardziej łatwo wyświetlić wyniki z poprzednich kroków.// Pause Console.ReadLine();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.