XPathExpression 类 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供一个类型化的类,表示已编译的 XPath 表达式。
public ref class XPathExpression abstractpublic abstract class XPathExpressiontype XPathExpression = classPublic MustInherit Class XPathExpression- 继承
- 
				XPathExpression
示例
以下示例演示如何使用 XPath 返回类型来确定如何处理 XPath 表达式。
public ref class Sample
{
public:
   static void Evaluate( XPathExpression^ expr, XPathNavigator^ nav )
   {
      XPathNodeIterator^ i = nav->Select(expr);
      switch ( expr->ReturnType )
      {
         case XPathResultType::Number:
            Console::WriteLine( nav->Evaluate( expr ) );
            break;
         case XPathResultType::NodeSet:
            while ( i->MoveNext() )
                        Console::WriteLine( i->Current );
            break;
         case XPathResultType::Boolean:
            if ( *safe_cast<bool^>(nav->Evaluate( expr )) )
                        Console::WriteLine( "True!" );
            break;
         case XPathResultType::String:
            Console::WriteLine( nav->Evaluate( expr ) );
            break;
      }
   }
};
int main()
{
   XPathDocument^ doc = gcnew XPathDocument( "contosoBooks.xml" );
   XPathNavigator^ nav = doc->CreateNavigator();
   XPathExpression^ expr1 = nav->Compile( ".//price/text()*10" ); // Returns a number.
   XPathExpression^ expr2 = nav->Compile( "bookstore/book/price" ); // Returns a nodeset.
   Sample^ MySample = gcnew Sample;
   MySample->Evaluate( expr1, nav );
   MySample->Evaluate( expr2, nav );
}
using System;
using System.Xml;
using System.Xml.XPath;
public class XPathExpressionExample
{
    public static void Main()
    {
        XPathDocument document = new XPathDocument("contosoBooks.xml");
        XPathNavigator navigator = document.CreateNavigator();
        XPathExpression expression1 = XPathExpression.Compile(".//bk:price/text()*10"); // Returns a number.
        XPathExpression expression2 = XPathExpression.Compile("bk:bookstore/bk:book/bk:price"); // Returns a nodeset.
        XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
        manager.AddNamespace("bk", "http://www.contoso.com/books");
        expression1.SetContext(manager);
        expression2.SetContext(manager);
        Evaluate(expression1, navigator);
        Evaluate(expression2, navigator);
    }
    public static void Evaluate(XPathExpression expression, XPathNavigator navigator)
    {
        switch (expression.ReturnType)
        {
            case XPathResultType.Number:
                Console.WriteLine(navigator.Evaluate(expression));
                break;
            case XPathResultType.NodeSet:
                XPathNodeIterator nodes = navigator.Select(expression);
                while (nodes.MoveNext())
                {
                    Console.WriteLine(nodes.Current.ToString());
                }
                break;
            case XPathResultType.Boolean:
                if ((bool)navigator.Evaluate(expression))
                    Console.WriteLine("True!");
                break;
            case XPathResultType.String:
                Console.WriteLine(navigator.Evaluate(expression));
                break;
        }
    }
}
Imports System.Xml
Imports System.Xml.XPath
Public Class XPathExpressionExample
    Public Shared Sub Main()
        Dim document As XPathDocument = New XPathDocument("contosoBooks.xml")
        Dim navigator As XPathNavigator = document.CreateNavigator()
        Dim expression1 As XPathExpression = XPathExpression.Compile(".//bk:price/text()*10")  ' Returns a number.
        Dim expression2 As XPathExpression = XPathExpression.Compile("bk:bookstore/bk:book/bk:price")  ' Returns a nodeset.
        Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)
        manager.AddNamespace("bk", "http://www.contoso.com/books")
        expression1.SetContext(manager)
        expression2.SetContext(manager)
        Evaluate(expression1, navigator)
        Evaluate(expression2, navigator)
    End Sub
    Public Shared Sub Evaluate(ByVal expression As XPathExpression, ByVal navigator As XPathNavigator)
        Select Case expression.ReturnType
            Case XPathResultType.Number
                Console.WriteLine(navigator.Evaluate(expression))
                Exit Sub
            Case XPathResultType.NodeSet
                Dim nodes As XPathNodeIterator = navigator.Select(expression)
                While nodes.MoveNext()
                    Console.WriteLine(nodes.Current.ToString())
                End While
            Case XPathResultType.Boolean
                If CType(navigator.Evaluate(expression), Boolean) Then
                    Console.WriteLine("True!")
                End If
            Case XPathResultType.String
                Console.WriteLine(navigator.Evaluate(expression))
        End Select
    End Sub
End Class
该示例使用 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>  
注解
此类作为 类的 方法XPathNavigator的结果Compile返回。 它是 类的 Evaluate、 Matches、 Select和 SelectSingleNode 方法的参数 XPathNavigator 。
实施者说明
从 XPathExpression 类继承时,必须重写以下成员:
属性
| Expression | 当在派生类中重写时,获取 XPathExpression 的  | 
| ReturnType | 当在派生类中重写时,获取 XPath 表达式的结果类型。 | 
方法
| AddSort(Object, IComparer) | 当在派生类中重写时,按指定的 IComparer 对象对 XPath 表达式选择的节点排序。 | 
| AddSort(Object, XmlSortOrder, XmlCaseOrder, String, XmlDataType) | 当在派生类中被重写时,根据所提供的参数对 XPath 表达式所选的节点进行排序。 | 
| Clone() | 当在派生类中重写时,获取此 XPathExpression 的复本。 | 
| Compile(String) | 编译指定的 XPath 表达式并返回表示 XPath 表达式的 XPathExpression 对象。 | 
| Compile(String, IXmlNamespaceResolver) | 使用用于命名空间解析的 IXmlNamespaceResolver 对象编译指定的 XPath 表达式,并且返回表示 XPath 表达式的 XPathExpression 对象。 | 
| Equals(Object) | 确定指定对象是否等于当前对象。(继承自 Object) | 
| GetHashCode() | 作为默认哈希函数。(继承自 Object) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| SetContext(IXmlNamespaceResolver) | 在派生类中被重写时,指定要用于命名空间解析的 IXmlNamespaceResolver 对象。 | 
| SetContext(XmlNamespaceManager) | 在派生类中被重写时,指定要用于命名空间解析的 XmlNamespaceManager 对象。 | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) |