Бөлісу құралы:


XPathNavigator.Evaluate Метод

Определение

Вычисляет заданное выражение XPath и возвращает типизированный результат.

Перегрузки

Evaluate(String)

Вычисляет заданное выражение XPath и возвращает типизированный результат.

Evaluate(XPathExpression)

Вычисляет XPathExpression и возвращает типизированный результат.

Evaluate(String, IXmlNamespaceResolver)

Вычисляет значение заданного выражения XPath и возвращает типизированный результат с помощью указанного объекта IXmlNamespaceResolver, который разрешает префиксы пространства имен в выражении XPath.

Evaluate(XPathExpression, XPathNodeIterator)

Использует предоставленный контекст для вычисления XPathExpression и возвращает типизированный результат.

Evaluate(String)

Вычисляет заданное выражение XPath и возвращает типизированный результат.

public:
 virtual System::Object ^ Evaluate(System::String ^ xpath);
public virtual object Evaluate (string xpath);
abstract member Evaluate : string -> obj
override this.Evaluate : string -> obj
Public Overridable Function Evaluate (xpath As String) As Object

Параметры

xpath
String

Строка, представляющая выражение XPath, которое следует вычислить.

Возвращаемое значение

Object

Результат выражения (логическое значение, число, строка или набор узлов). Он сопоставляется с объектом Boolean, Double, String или XPathNodeIterator соответственно.

Исключения

Возвращаемый тип выражения XPath — набор узлов.

Недопустимое выражение XPath.

Примеры

В следующем примере вычисляется выражение XPath и возвращается Doubleвыражение .

XPathDocument^ document = gcnew XPathDocument("books.xml");
XPathNavigator^ navigator = document->CreateNavigator();

Double total = (double)navigator->Evaluate("sum(descendant::book/price)");
Console::WriteLine("Total price for all books: {0}", total.ToString());
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();

Double total = (double)navigator.Evaluate("sum(descendant::book/price)");
Console.WriteLine("Total price for all books: {0}", total.ToString());
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

Dim total As Double = CType(navigator.Evaluate("sum(descendant::book/price)"), Double)
Console.WriteLine("Total price for all books: {0}", total.ToString())

В примере в качестве входных данных используется файл books.xml.

<?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>  

Комментарии

Следующий C# код преобразует узел в Price/text() число, умножает его на 10 и возвращает полученное значение.

nav.Evaluate("Price/text()*10");  

Примечание

Для оценки функций XPath position() и last(), если они не используются в качестве предиката в шаге расположения, требуется ссылка на набор узлов. В этом случае необходимо использовать перегрузку, которая принимает XPathNodeIterator в качестве аргумента; в противном случае , position() и last() return 0.

Этот метод не влияет на состояние XPathNavigatorобъекта .

См. также раздел

Применяется к

Evaluate(XPathExpression)

Вычисляет XPathExpression и возвращает типизированный результат.

public:
 virtual System::Object ^ Evaluate(System::Xml::XPath::XPathExpression ^ expr);
public virtual object Evaluate (System.Xml.XPath.XPathExpression expr);
abstract member Evaluate : System.Xml.XPath.XPathExpression -> obj
override this.Evaluate : System.Xml.XPath.XPathExpression -> obj
Public Overridable Function Evaluate (expr As XPathExpression) As Object

Параметры

expr
XPathExpression

XPathExpression, которое можно вычислить.

Возвращаемое значение

Object

Результат выражения (логическое значение, число, строка или набор узлов). Он сопоставляется с объектом Boolean, Double, String или XPathNodeIterator соответственно.

Исключения

Возвращаемый тип выражения XPath — набор узлов.

Недопустимое выражение XPath.

Примеры

В следующем примере вычисляется XPathExpression и возвращается значение Double.

XPathDocument^ document = gcnew XPathDocument("books.xml");
XPathNavigator^ navigator = document->CreateNavigator();

XPathExpression^ query = navigator->Compile("sum(descendant::book/price)");

Double total = (double)navigator->Evaluate(query);
Console::WriteLine("Total price for all books: {0}", total.ToString());
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();

XPathExpression query = navigator.Compile("sum(descendant::book/price)");

Double total = (double)navigator.Evaluate(query);
Console.WriteLine("Total price for all books: {0}", total.ToString());
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

Dim query As XPathExpression = navigator.Compile("sum(descendant::book/price)")

Dim total As Double = CType(navigator.Evaluate(query), Double)
Console.WriteLine("Total price for all books: {0}", total.ToString())

В примере в качестве входных данных используется файл books.xml.

<?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>  

Комментарии

Следующий C# код возвращает число после преобразования Price/text() узла в число и умножения значения на 10.

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

Примечание

Для оценки функций XPath position() и last(), если они не используются в качестве предиката в шаге расположения, требуется ссылка на набор узлов. В этом случае необходимо использовать перегрузку, которая принимает XPathNodeIterator в качестве аргумента; в противном случае , position() и last() return 0.

Этот метод не влияет на состояние XPathNavigatorобъекта .

См. также раздел

Применяется к

Evaluate(String, IXmlNamespaceResolver)

Вычисляет значение заданного выражения XPath и возвращает типизированный результат с помощью указанного объекта IXmlNamespaceResolver, который разрешает префиксы пространства имен в выражении XPath.

public:
 virtual System::Object ^ Evaluate(System::String ^ xpath, System::Xml::IXmlNamespaceResolver ^ resolver);
public virtual object Evaluate (string xpath, System.Xml.IXmlNamespaceResolver? resolver);
public virtual object Evaluate (string xpath, System.Xml.IXmlNamespaceResolver resolver);
abstract member Evaluate : string * System.Xml.IXmlNamespaceResolver -> obj
override this.Evaluate : string * System.Xml.IXmlNamespaceResolver -> obj
Public Overridable Function Evaluate (xpath As String, resolver As IXmlNamespaceResolver) As Object

Параметры

xpath
String

Строка, представляющая выражение XPath, которое следует вычислить.

resolver
IXmlNamespaceResolver

Объект IXmlNamespaceResolver, используемый для разрешения префиксов пространства имен в выражении XPath.

Возвращаемое значение

Object

Результат выражения (логическое значение, число, строка или набор узлов). Он сопоставляется с объектом Boolean, Double, String или XPathNodeIterator соответственно.

Исключения

Возвращаемый тип выражения XPath — набор узлов.

Недопустимое выражение XPath.

Примеры

В следующем примере вычисляется выражение XPath и возвращается Double объект, XmlNamespaceManager указанный для разрешения префиксов пространства имен в выражении XPath.

XPathDocument^ document = gcnew XPathDocument("contosoBooks.xml");
XPathNavigator^ navigator = document->CreateNavigator();

XmlNamespaceManager^ manager = gcnew 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());
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());
Dim document As XPathDocument = New XPathDocument("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)
manager.AddNamespace("bk", "http://www.contoso.com/books")

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

В примере в качестве входных данных используется файл contosoBooks.xml.

<?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>  

Комментарии

Следующий C# код возвращает число после преобразования Price/text() узла в число и умножения значения на 10.

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

Примечание

Для оценки функций XPath position() и last(), если они не используются в качестве предиката в шаге расположения, требуется ссылка на набор узлов. В этом случае необходимо использовать перегрузку, которая принимает XPathNodeIterator в качестве аргумента; в противном случае , position() и last() return 0.

Этот метод не влияет на состояние XPathNavigatorобъекта .

Применяется к

Evaluate(XPathExpression, XPathNodeIterator)

Использует предоставленный контекст для вычисления XPathExpression и возвращает типизированный результат.

public:
 virtual System::Object ^ Evaluate(System::Xml::XPath::XPathExpression ^ expr, System::Xml::XPath::XPathNodeIterator ^ context);
public virtual object Evaluate (System.Xml.XPath.XPathExpression expr, System.Xml.XPath.XPathNodeIterator? context);
public virtual object Evaluate (System.Xml.XPath.XPathExpression expr, System.Xml.XPath.XPathNodeIterator context);
abstract member Evaluate : System.Xml.XPath.XPathExpression * System.Xml.XPath.XPathNodeIterator -> obj
override this.Evaluate : System.Xml.XPath.XPathExpression * System.Xml.XPath.XPathNodeIterator -> obj
Public Overridable Function Evaluate (expr As XPathExpression, context As XPathNodeIterator) As Object

Параметры

expr
XPathExpression

XPathExpression, которое можно вычислить.

context
XPathNodeIterator

Объект XPathNodeIterator, указывающий на выбранный узел, в котором должно выполняться вычисление.

Возвращаемое значение

Object

Результат выражения (логическое значение, число, строка или набор узлов). Он сопоставляется с объектом Boolean, Double, String или XPathNodeIterator соответственно.

Исключения

Возвращаемый тип выражения XPath — набор узлов.

Недопустимое выражение XPath.

Примеры

В следующем примере вычисляется XPathExpression и возвращается Double использование Current узла в качестве контекстного XPathNodeIterator узла.

XPathDocument^ document = gcnew XPathDocument("books.xml");
XPathNavigator^ navigator = document->CreateNavigator();

XPathNodeIterator^ nodes = navigator->Select("//book");
XPathExpression^ query = nodes->Current->Compile("sum(descendant::price)");

Double total = (double)navigator->Evaluate(query, nodes);
Console::WriteLine("Total price for all books: {0}", total.ToString());
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();

XPathNodeIterator nodes = navigator.Select("//book");
XPathExpression query = nodes.Current.Compile("sum(descendant::price)");

Double total = (double)navigator.Evaluate(query, nodes);
Console.WriteLine("Total price for all books: {0}", total.ToString());
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

Dim nodes As XPathNodeIterator = navigator.Select("//book")
Dim query As XPathExpression = nodes.Current.Compile("sum(descendant::price)")

Dim total As Double = CType(navigator.Evaluate(query, nodes), Double)
Console.WriteLine("Total price for all books: {0}", total.ToString())

В примере в качестве входных данных используется файл books.xml.

<?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>  

Комментарии

Выражение вычисляется с помощью Current узла контекстного XPathNodeIterator узла. nullВ противном случае context узел, на котором XPathNavigator в данный момент располагается, используется в качестве узла контекста.

Функции position() и last(), если они не используются в качестве предиката в шаге расположения, всегда возвращают значение 0 при следующих условиях:

Так как функции position() и last() работают на текущем узле, не следует использовать Current свойство для перемещения от выбранного набора узлов. Это может сделать недействительным состояние XPathNavigatorобъекта .

Этот метод не влияет на состояние XPathNavigatorобъекта .

Применяется к