# Evaluate XPath Expressions using XPathNavigator

The XPathNavigator class provides the Evaluate method to evaluate an XPath expression. The Evaluate method takes an XPath expression, evaluates it and returns a W3C XPath type of Boolean, Number, String, or Node Set based on the result of the XPath expression.

## The Evaluate Method

The Evaluate method takes an XPath expression, evaluates it, and returns a typed result of Boolean (Boolean), Number (Double), String (String), or Node Set (XPathNodeIterator). For example, the Evaluate method could be used in a mathematical method. The following example code calculates the total price of all the books in the books.xml file.

Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

Dim query As XPathExpression = navigator.Compile("sum(//price/text())")
Dim total As Double = CType(navigator.Evaluate(query), Double)
Console.WriteLine(total)

XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();

XPathExpression query = navigator.Compile("sum(//price/text())");
Double total = (Double)navigator.Evaluate(query);
Console.WriteLine(total);


The example takes the books.xml file as input.

<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>


### position and last Functions

The Evaluate method is overloaded. One of the Evaluate methods takes an XPathNodeIterator object as a parameter. This particular Evaluate method is identical to the Evaluate method that takes only an XPathExpression object as a parameter, except that it allows a node set argument to specify the current context to perform the evaluation on. This context is required for the XPath position() and last() functions as they are relative to the current context node. Unless used as a predicate in a location step, the position() and last() functions require a reference to a node set in order to be evaluated otherwise, the position and last functions return 0.