Delen via


Visual C# gebruiken om een query uit te voeren op XML met een XPath-expressie

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.XPathvan 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

  1. 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.
  2. Zorg ervoor dat het project verwijst naar de System.Xml naamruimte.

  3. Gebruik de using instructie voor de Xml en XPath naamruimten, zodat u geen declaraties in die naamruimten later in uw code hoeft in aanmerking te komen. U kunt de using instructie als volgt gebruiken voor andere declaraties:

    using System.Xml;
    using System.Xml.XPath;
    
  4. Declareer de juiste variabelen. Declareer een XPathDocument object voor het OPSLAAN van het XML-document, een XpathNavigator object om XPath-expressies te evalueren en een XPathNodeIterator object om door geselecteerde knooppunten te doorlopen. Declareer een String object voor het opslaan van de XPath-expressies. Voeg de declaratiecode toe in de Main functie in Class1.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Laad een XPathDocument bestand met het voorbeeldbestand Books.xml. De XPathDocument 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 het XPath gegevensmodel.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Maak een XPathNavigator van het document. Het XPathNavigator 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();
    
  7. 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)";
    
  8. Gebruik de Evaluate methode van het XPathNavigator object om de XPath-expressie te evalueren. De Evaluate 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));
    
  9. 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]";
    
  10. Maak een XPathNodeIterator voor de knooppunten die zijn geselecteerd met de Select methode van de XPathNavigator. Het XPathNodeIterator vertegenwoordigt een XPath-knooppuntset en ondersteunt bewerkingen op deze knooppuntset.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. Gebruik de XPathNodeIterator, die is geretourneerd vanuit de Select methode van XPathNavigator, om door de geselecteerde knooppunten te lopen. In dit geval kunt u de methode van de MoveNext 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);
    };
    
  12. 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();
    
  13. 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.

Verwijzingen