This topic has not yet been rated - Rate this topic

XPathNavigator.Evaluate Method (String, IXmlNamespaceResolver)

[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]

Evaluates the specified XPath expression and returns the typed result, using the IXmlNamespaceResolver object specified to resolve namespace prefixes in the XPath expression.

Namespace:  System.Xml.XPath
Assembly:  System.Xml (in System.Xml.dll)

public virtual Object Evaluate(
	string xpath,
	IXmlNamespaceResolver resolver
)

Parameters

xpath
Type: System.String
A string representing an XPath expression that can be evaluated.
resolver
Type: System.Xml.IXmlNamespaceResolver
The IXmlNamespaceResolver object used to resolve namespace prefixes in the XPath expression.

Return Value

Type: System.Object
The result of the expression (Boolean, number, string, or node set). This maps to Boolean, Double, String, or XPathNodeIterator objects respectively.
Exception Condition
ArgumentException

The return type of the XPath expression is a node set.

XPathException

The XPath expression is not valid.

The following C# code returns a number after converting the Price/text() node to a number and multiplying the value by 10.

XPathExpression expr = nav.Compile("Price/text()*10");
nav.Evaluate(expr);
NoteNote

The XPath position() and last() functions, unless used as a predicate in a location step, require a reference to a node set in order to be evaluated. In this case, you must use the overload which takes an XPathNodeIterator as an argument; otherwise, position() and last() return 0.

This method has no effect on the state of the XPathNavigator.

The following example evaluates an XPath expression and returns a Double using the XmlNamespaceManager object specified to resolve namespace prefixes in the XPath expression.


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

XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("bk", "http://www.contoso.com/books");

Double total = (double)navigator.Evaluate("sum(descendant::bk:book/bk:price)", manager);
Console.WriteLine("Total price for all books: {0}", total.ToString());


The example takes the contosoBooks.xml file as an input.


<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
    <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>


.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8 Release Preview, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 SP2, Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Did you find this helpful?
(1500 characters remaining)