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 uitgelegd hoe u een query uitvoert op een XPathDocument
object met een XPath-expressie (XML Path Language) met behulp van de XPathNavigator
klasse.
Oorspronkelijke productversie: Visual Studio, .NET Framework
Oorspronkelijk KB-nummer: 308333
Samenvatting
XPath wordt programmatisch gebruikt om expressies te evalueren en specifieke knooppunten in een document te selecteren.
Dit artikel verwijst naar de Naamruimte System.Xml.XPath
van de Microsoft .NET Framework-klassebibliotheek.
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's uitvoeren op XML met een XPath-expressie
Maak een nieuwe Visual C#-consoletoepassing in Visual Studio.
Notitie
- In dit voorbeeld wordt een bestand met de naam Books.xml gebruikt. 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 deze niet wilt installeren, raadpleegt u de sectie Verwijzingen voor de Books.xml downloadlocatie. Als u de quickstarts hebt geïnstalleerd, kunt u het bestand vinden in
Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB
de map. U kunt het bestand kopiëren naar de\Bin\Debug
map, die zich bevindt onder de map waarin u dit project hebt gemaakt.
- In dit voorbeeld wordt een bestand met de naam Books.xml gebruikt. 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 deze niet wilt installeren, raadpleegt u de sectie Verwijzingen voor de Books.xml downloadlocatie. Als u de quickstarts hebt geïnstalleerd, kunt u het bestand vinden in
Zorg ervoor dat het project verwijst naar de
System.Xml
naamruimte.Gebruik de
using
instructie voor deXml
enXPath
naamruimten, zodat u geen declaraties in die naamruimten later in uw code hoeft in aanmerking te komen. U kunt deusing
instructie als volgt gebruiken voor andere declaraties:using System.Xml; using System.Xml.XPath;
Declareer de juiste variabelen. Declareer een
XPathDocument
object voor het OPSLAAN van het XML-document, eenXpathNavigator
object om XPath-expressies te evalueren en eenXPathNodeIterator
object om door geselecteerde knooppunten te doorlopen. Declareer eenString
object voor het opslaan van de XPath-expressies. Voeg de declaratiecode toe in deMain
functie inClass1
.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;
Laad een
XPathDocument
bestand met het voorbeeldbestand Books.xml. DeXPathDocument
klasse 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 hetXPath
gegevensmodel.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");
Maak een
XPathNavigator
van het document. HetXPathNavigator
object 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
Evaluate
methode van hetXPathNavigator
object om de XPath-expressie te evalueren. DeEvaluate
methode 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
XPathNodeIterator
voor de knooppunten die zijn geselecteerd met deSelect
methode van deXPathNavigator
. HetXPathNodeIterator
vertegenwoordigt een XPath-knooppuntset en ondersteunt bewerkingen op deze knooppuntset.// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);
Gebruik de
XPathNodeIterator
, die is geretourneerd vanuit deSelect
methode vanXPathNavigator
, om door de geselecteerde knooppunten te lopen. In dit geval kunt u de methode van deMoveNext
XPathNodeIterator
methode gebruiken om alle geselecteerde knooppunten te herhalen.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
ReadLine
methode om aan het einde van de consoleweergave een pauze toe te voegen om de bovenstaande resultaten 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, wordt mogelijk het volgende uitzonderingsfoutbericht weergegeven:
Er is een niet-verwerkte uitzondering van het type System.Xml.XmlException opgetreden in System.xml.dll
Aanvullende informatie: Systeemfout.
De uitzonderingsfout treedt op op de volgende regel code:
docNav = new XPathDocument("c:\\books.xml");
De uitzonderingsfout 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.