DetailPage-MSS-KB

Microsoft small business knowledge base

Article ID: 308333 - Last Review: March 13, 2008 - Revision: 7.2

This article was previously published under Q308333

On This Page

SUMMARY

This article demonstrates how to query an XPathDocument object with an XML Path Language (XPath) expression using the XPathNavigator class. XPath is used programmatically to evaluate expressions and select specific nodes in a document.

Requirements

The following list outlines the recommended hardware, software, network infrastructure, and service packs that you need:
  • Visual C#
This article assumes that you are familiar with the following topics:
  • XML terminology
  • Creating and reading an XML file
  • XPath syntax

How to Query XML with an XPath Expression

  1. Create a new Visual C# Console Application in Visual Studio.

    NOTE: This example uses a file named Books.xml. You can create your own Books.xml file, or you can use the sample that is included with the .NET Software Development Kit (SDK) Quickstarts. If you do not have the Quickstarts installed and do not want to install them, see the "References" section for the Books.xml download location. If you have the Quickstarts installed, the file can be found in the following folder:
    Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB
    You must copy the file to the \Bin\Debug folder, which is located under the folder in which you created this project.
  2. Make sure that the project references the System.Xml namespace.
  3. Use the using statement on the Xml and XPath namespaces so that you are not required to qualify declarations in those namespaces later in your code. You must use the using statement prior to any other declarations, as follows:
    using System.Xml;
    using System.Xml.XPath;
    					
  4. Declare the appropriate variables. Declare an XPathDocument object to hold the XML document, an XpathNavigator object to evaluate XPath expressions, and an XPathNodeIterator object to iterate through selected nodes. Declare a String object to hold the XPath expressions. Add the declaration code in the Main function in Class1.
       XPathNavigator nav;
       XPathDocument docNav;
       XPathNodeIterator NodeIter;
       String strExpression;
    					
  5. Load an XPathDocument with the sample file Books.xml. The XPathDocument class uses Extensible Stylesheet Language Transformations (XSLT) to provide a fast and performance-oriented cache for XML document processing. It is similar to the XML Document Object Model (DOM) but is highly optimized for XSLT processing and the XPath data model.
        // Open the XML.
        docNav = new XPathDocument(@"c:\books.xml");
    					
  6. Create an XPathNavigator from the document. The XPathNavigator object is used for read-only XPath queries. The XPath queries may return a resulting value or many nodes.
         // Create a navigator to query with XPath.
         nav = docNav.CreateNavigator();
    					
  7. Create an XPath expression to find the average cost of a book. This XPath expression returns a single value. For full details on XPath syntax, see "XPath Syntax" in the "References" section.
         // Find the average cost of a book.
         // This expression uses standard XPath syntax.
         strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
    					
  8. Use the Evaluate method of the XPathNavigator object to evaluate the XPath expression. The Evaluate method returns the results of the expression.
        // Use the Evaluate method to return the evaluated expression.
        Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
  9. Create an XPath expression to find all of the books that cost more than ten dollars. This XPath expression returns only Title nodes from the XML source.
        // Find the title of the books that are greater then $10.00.
        strExpression = "/bookstore/book/title[../price>10.00]";
    					
  10. Create an XPathNodeIterator for the nodes that are selected with the Select method of the XPathNavigator. The XPathNodeIterator represents an XPath nodeset and therefore supports operations on this nodeset.
        // Select the node and place the results in an iterator.
        NodeIter = nav.Select(strExpression);
  11. Use the XPathNodeIterator, which was returned from the Select method of XPathNavigator, to move through the selected nodes. In this case, you can use the MoveNext method of the XPathNodeIterator to iterate through all of the selected nodes.
      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. Use the ReadLine method to add a pause at the end of the console display to more readily display the above results.
        // Pause
        Console.ReadLine();
    					
  13. Build and run your project. Note that the results are displayed in the console window.

Troubleshooting

When you test the code, you may receive the following exception error message:
An unhandled exception of type 'System.Xml.XmlException' occurred in System.xml.dll

Additional information: System error.
The exception error occurs on the following line of code:
docNav = new XPathDocument("c:\\books.xml");
				
The exception error is caused by an invalid processing instruction. For example, the processing instruction may contain extraneous spaces. The following is an example of an invalid processing instruction:
<?xml version='1.0' ?>
To resolve the exception, do either of the following:
  • Correct the invalid processing instruction. The following is an example of a valid processing instruction:
    <?xml version='1.0'?>
    -OR-
  • Remove the XML processing instruction from the Books.xml file.

REFERENCES

The following file is available for download from the Microsoft Download Center:
Collapse this imageExpand this image
Download
Download Books.xml now (http://download.microsoft.com/download/xml/utility/1.0.0.1/wxp/en-us/books.exe)
For more information, visit the following Microsoft Web sites:
XML in .NET: .NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation
http://msdn.microsoft.com/msdnmag/issues/01/01/xml/default.aspx (http://msdn.microsoft.com/msdnmag/issues/01/01/xml/default.aspx)

XPathNavigator Class
http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.aspx (http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.aspx)

XPathDocument Class
http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathdocument.aspx (http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathdocument.aspx)

XPathNodeIterator Class
http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnodeiterator.aspx (http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnodeiterator.aspx)

XSLT Transformations with the XslTransform Class
http://msdn.microsoft.com/en-us/library/47yh29a9.aspx (http://msdn.microsoft.com/en-us/library/47yh29a9.aspx)

XPath Syntax
http://msdn2.microsoft.com/en-us/library/ms763742.aspx (http://msdn2.microsoft.com/en-us/library/ms763742.aspx)
For more information about XPath, visit the following World Wide Web Consortium (W3C) Web site:
XML Path Language (XPath)
Version 1.0: W3C Recommendation 16 November 1999
http://www.w3.org/TR/1999/REC-xpath-19991116 (http://www.w3.org/TR/1999/REC-xpath-19991116)

APPLIES TO
  • Microsoft ADO.NET 1.0
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Keywords: 
kbdownload kbhowtomaster KB308333
Share
Additional support options
Ask The Microsoft Small Business Support Community
Contact Microsoft Small Business Support
Find Microsoft Small Business Support Certified Partner
Find a Microsoft Store For In-Person Small Business Support