Uwaga
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 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.XPath
nazw 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
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.
- 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
Upewnij się, że projekt odwołuje się do
System.Xml
przestrzeni nazw.Użyj instrukcji
using
wXml
przestrzeniach nazw iXPath
, 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;
Zadeklaruj odpowiednie zmienne. Zadeklaruj
XPathDocument
obiekt do przechowywania dokumentu XML,XpathNavigator
obiektu do oceny wyrażeń XPath iXPathNodeIterator
obiektu do iterowania przez wybrane węzły. ZadeklarujString
obiekt do przechowywania wyrażeń XPath. Dodaj kod deklaracji wMain
funkcji w plikuClass1
.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;
Załaduj plik
XPathDocument
z przykładowym plikiem Books.xml. KlasaXPathDocument
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ątemXPath
przetwarzania XSLT i modelu danych.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");
Utwórz element
XPathNavigator
na podstawie dokumentu. ObiektXPathNavigator
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();
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)";
Evaluate
Użyj metodyXPathNavigator
obiektu, aby ocenić wyrażenie XPath. MetodaEvaluate
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));
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 element
XPathNodeIterator
dla węzłów wybranych zaSelect
pomocą metodyXPathNavigator
. ObiektXPathNodeIterator
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);
XPathNodeIterator
Użyj metody , która została zwrócona zSelect
metodyXPathNavigator
, 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); };
ReadLine
Użyj metody , aby dodać pauzę na końcu ekranu konsoli, aby bardziej łatwo wyświetlić powyższe wyniki.// 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:
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.