Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u een query uitvoert op een XPathDocument object met behulp van een XPath-expressie (XML Path Language) en de XPathNavigator klasse.
XPath wordt programmatisch gebruikt om expressies te evalueren en specifieke knooppunten in een document te selecteren.
Dit artikel verwijst naar de Microsoft .NET Framework Class Library-naamruimte. System.Xml.XPath
Van toepassing op: Visual Studio, .NET Framework
Oorspronkelijk KB-nummer: 308333
Vereiste voorwaarden
In dit artikel wordt ervan uitgegaan dat u bekend bent met de volgende onderwerpen:
- Visual C#
- XML-terminologie
- Een XML-bestand maken en lezen
- XPath-syntaxis
Query XPathDocument met een XPath-expressie
Maak in Microsoft Visual Studio een Visual C#-consoletoepassing.
Notitie
In dit voorbeeld wordt een bestand met de naam Books.xmlgebruikt. U kunt uw eigen Books.xml-bestand maken of u kunt het voorbeeld gebruiken dat is opgenomen in de quickstarts van de .NET Software Development Kit (SDK).
Als u de quickstarts niet hebt geïnstalleerd en u deze niet wilt installeren, raadpleegt u de sectie Gerelateerde inhoud voor de Books.xml downloadlocatie.
Als u de quickstarts hebt geïnstalleerd, kunt u het bestand Books.xml vinden in de
Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VBmap. U kunt het bestand kopiëren naar de\Bin\Debugsubmap van de map waarin u dit project hebt gemaakt.Zorg ervoor dat het project verwijst naar de
System.Xmlnaamruimte.Gebruik de
usinginstructie voor deXmlenXPathnaamruimten, zodat u geen declaraties in die naamruimten later in uw code hoeft in aanmerking te komen. U kunt deusinginstructie als volgt gebruiken voor andere declaraties:using System.Xml; using System.Xml.XPath;Declareer de juiste variabelen. Declareer een
XPathDocumentobject voor het OPSLAAN van het XML-document, eenXpathNavigatorobject om XPath-expressies te evalueren en eenXPathNodeIteratorobject om door geselecteerde knooppunten te doorlopen. Declareer eenStringobject voor het opslaan van de XPath-expressies. Voeg de declaratiecode toe aan deMainfunctie inClass1.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;Laad een
XPathDocumentbestand samen met het voorbeeldbestand Books.xml. DeXPathDocumentklasse maakt gebruik van Extensible Stylesheet Language Transformations (XSLT) om een snelle en prestatiegerichte cache te bieden voor XML-documentverwerking. Het is vergelijkbaar met het XML Document Object Model (DOM), maar is sterk geoptimaliseerd voor XSLT-verwerking en hetXPathgegevensmodel.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");Maak een
XPathNavigatorvan het document. HetXPathNavigatorobject wordt gebruikt voor alleen-lezen XPath-query's. De XPath-query's kunnen een resulterende waarde of veel knooppunten retourneren.// Create a navigator to query with XPath. nav = docNav.CreateNavigator();Maak een XPath-expressie om de gemiddelde kosten van een boek te vinden. Deze XPath-expressie retourneert één waarde. Zie XPath-syntaxis in de sectie Verwijzingen voor meer informatie over de XPath-syntaxis.
// Find the average cost of a book. // This expression uses standard XPath syntax. strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";Gebruik de
Evaluatemethode van hetXPathNavigatorobject om de XPath-expressie te evalueren. DeEvaluatemethode retourneert de resultaten van de expressie.// Use the Evaluate method to return the evaluated expression. Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));Maak een XPath-expressie om alle boeken te vinden die meer dan 10 dollar kosten. Deze XPath-expressie retourneert alleen titelknooppunten uit de XML-bron.
// Find the title of the books that are greater then $10.00. strExpression = "/bookstore/book/title[../price>10.00]";Maak een
XPathNodeIteratorvoor de nodes in combinatie met deSelect-methode van deXPathNavigator. HetXPathNodeIteratorvertegenwoordigt een XPath-knooppuntset en ondersteunt bewerkingen op deze knooppuntset.// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);Als u door de geselecteerde knooppunten wilt gaan, gebruikt u de
XPathNodeIteratordie is geretourneerd door deSelectmethode vanXPathNavigator. In dit geval kunt u deMoveNext-methode van deXPathNodeIteratorgebruiken om door alle geselecteerde knooppunten te itereren.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); };Gebruik de
ReadLinemethode om aan het einde van de consoleweergave een pauze toe te voegen om de resultaten uit de vorige stappen gemakkelijker weer te geven.// Pause Console.ReadLine();Bouw uw project en voer het uit.
Notitie
De resultaten worden weergegeven in het consolevenster.
Probleemoplossing
Wanneer u de code test, ontvangt u mogelijk het volgende uitzonderingsfoutbericht:
An unhandled exception of type System.Xml.XmlException occurred in System.xml.dll
Additional information: System error.
Deze uitzondering treedt op in de volgende regel van de code.
docNav = new XPathDocument("c:\\books.xml");
De fout wordt veroorzaakt door een ongeldige verwerkingsinstructie. De verwerkingsinstructie kan bijvoorbeeld overbodige spaties bevatten. Het volgende voorbeeld is een ongeldige verwerkingsinstructie:
<?xml version='1.0' ?>
Gebruik een van de volgende oplossingen om de uitzondering op te lossen:
Corrigeer de ongeldige verwerkingsinstructie. Het volgende voorbeeld is een geldige verwerkingsinstructie:
<?xml version='1.0'?>Verwijder de XML-verwerkingsinstructie uit het Books.xml-bestand.