Dela via


Använd Visual C# för att fråga XML med ett XPath-uttryck

Den här artikeln beskriver hur du kör frågor mot ett XPathDocument objekt med ett XPath-uttryck (XML Path Language) med hjälp XPathNavigator av klassen .

Ursprunglig produktversion: Visual Studio, .NET Framework
Ursprungligt KB-nummer: 308333

Sammanfattning

XPath används programmatiskt för att utvärdera uttryck och välja specifika noder i ett dokument.

Den här artikeln refererar till microsoft .NET Framework-klassbibliotekets namnområde System.Xml.XPath.

Den här artikeln förutsätter att du är bekant med följande ämnen:

  • Visual C#
  • XML-terminologi
  • Skapa och läsa en XML-fil
  • XPath-syntax

Fråga XML med ett XPath-uttryck

  1. Skapa ett nytt Visual C#-konsolprogram i Visual Studio.

    Kommentar

    • I det här exemplet används en fil med namnet Books.xml. Du kan skapa en egen Books.xml fil, eller så kan du använda exemplet som ingår i snabbstarterna för .NET Software Development Kit (SDK). Om du inte har installerat snabbstarterna och inte vill installera dem kan du läsa avsnittet Referenser för Books.xml nedladdningsplats. Om du har installerat snabbstarterna kan du hitta filen i Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB mappen . Du kan kopiera filen till \Bin\Debug mappen som finns under mappen där du skapade projektet.
  2. Kontrollera att projektet refererar till System.Xml namnområdet.

  3. Använd -instruktionen using på namnrymderna Xml och XPath så att du inte behöver kvalificera deklarationer i dessa namnområden senare i koden. Du kan använda -instruktionen using före andra deklarationer enligt följande:

    using System.Xml;
    using System.Xml.XPath;
    
  4. Deklarera lämpliga variabler. Deklarera ett XPathDocument objekt som ska innehålla XML-dokumentet, ett XpathNavigator objekt för att utvärdera XPath-uttryck och ett XPathNodeIterator objekt som ska iterera via valda noder. Deklarera ett String objekt som ska innehålla XPath-uttrycken. Lägg till deklarationskoden i Main funktionen i Class1.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Läs in en XPathDocument med exempelfilen Books.xml. Klassen XPathDocument använder XSLT (Extensible Stylesheet Language Transformations) för att tillhandahålla en snabb och prestandaorienterad cache för XML-dokumentbearbetning. Den liknar XML-dokumentobjektmodellen (DOM) men är mycket optimerad för XSLT-bearbetning och XPath datamodellen.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Skapa en XPathNavigator från dokumentet. Objektet XPathNavigator används för skrivskyddade XPath-frågor. XPath-frågorna kan returnera ett resulterande värde eller många noder.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. Skapa ett XPath-uttryck för att hitta den genomsnittliga kostnaden för en bok. Det här XPath-uttrycket returnerar ett enda värde. Fullständig information om XPath-syntax finns i XPath-syntax i avsnittet Referenser .

    // Find the average cost of a book.
    // This expression uses standard XPath syntax.
    strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
    
  8. Evaluate Använd -metoden för XPathNavigator objektet för att utvärdera XPath-uttrycket. Metoden Evaluate returnerar resultatet av uttrycket.

    // Use the Evaluate method to return the evaluated expression.
    Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
    
  9. Skapa ett XPath-uttryck för att hitta alla böcker som kostar mer än 10 dollar. Det här XPath-uttrycket returnerar endast rubriknoder från XML-källan.

    // Find the title of the books that are greater then $10.00.
    strExpression = "/bookstore/book/title[../price>10.00]";
    
  10. Skapa en XPathNodeIterator för de noder som har valts med Select metoden för XPathNavigator. XPathNodeIterator Representerar en XPath-noduppsättning och stöder åtgärder på den här noduppsättningen.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. XPathNodeIteratorAnvänd , som returnerades från Select metoden XPathNavigatorför , för att gå igenom de valda noderna. I det här fallet kan du använda MoveNext metoden XPathNodeIterator för att iterera genom alla valda noder.

    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. ReadLine Använd metoden för att lägga till en paus i slutet av konsolskärmen för att lättare visa ovanstående resultat.

    // Pause
    Console.ReadLine();
    
  13. Skapa och kör projektet.

    Kommentar

    Resultatet visas i konsolfönstret.

Felsökning

När du testar koden kan följande felmeddelande visas:

Ett ohanterat undantag av typen System.Xml.XmlException inträffade i System.xml.dll
Ytterligare information: Systemfel.

Undantagsfelet inträffar på följande kodrad:

docNav = new XPathDocument("c:\\books.xml");

Undantagsfelet orsakas av en ogiltig bearbetningsinstruktion. Bearbetningsinstruktionen kan till exempel innehålla överflödiga blanksteg. Följande exempel är en ogiltig bearbetningsinstruktion:

<?xml version='1.0' ?>

Lös undantaget genom att använda någon av följande lösningar:

  • Korrigera den ogiltiga bearbetningsinstruktionen. Följande exempel är en giltig bearbetningsinstruktion:

    <?xml version='1.0'?>
    
  • Ta bort XML-bearbetningsinstruktionen från Books.xml-filen.

Referenser