XPathExpression.Compile 方法

定义

编译指定的 XPath 表达式,并且返回表示 XPath 表达式的 XPathExpression 对象。

重载

Compile(String)

编译指定的 XPath 表达式并返回表示 XPath 表达式的 XPathExpression 对象。

Compile(String, IXmlNamespaceResolver)

使用用于命名空间解析的 IXmlNamespaceResolver 对象编译指定的 XPath 表达式,并且返回表示 XPath 表达式的 XPathExpression 对象。

Compile(String)

编译指定的 XPath 表达式并返回表示 XPath 表达式的 XPathExpression 对象。

public:
 static System::Xml::XPath::XPathExpression ^ Compile(System::String ^ xpath);
public static System.Xml.XPath.XPathExpression Compile (string xpath);
static member Compile : string -> System.Xml.XPath.XPathExpression
Public Shared Function Compile (xpath As String) As XPathExpression

参数

xpath
String

XPath 表达式。

返回

XPathExpression

一个 XPathExpression 对象。

例外

XPath 表达式参数不是有效的 XPath 表达式。

XPath 表达式无效。

示例

以下示例演示如何使用 XPath 返回类型来确定如何处理 XPath 表达式。 此示例使用 Compile 该方法返回新 XPathExpression 对象。

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>  

注解

计算 XPath 表达式以生成以下结果类型之一。

备注

如果在 XPath 表达式中指定了具有无效数量的参数 (的用户定义函数或未实现的用户定义函数) ,则仅在运行时发生异常。 用户定义函数在编译时不会检查,仅当执行计算表达式时,才会发生用户定义的函数导致的异常。

另请参阅

适用于

Compile(String, IXmlNamespaceResolver)

使用用于命名空间解析的 IXmlNamespaceResolver 对象编译指定的 XPath 表达式,并且返回表示 XPath 表达式的 XPathExpression 对象。

public:
 static System::Xml::XPath::XPathExpression ^ Compile(System::String ^ xpath, System::Xml::IXmlNamespaceResolver ^ nsResolver);
public static System.Xml.XPath.XPathExpression Compile (string xpath, System.Xml.IXmlNamespaceResolver? nsResolver);
public static System.Xml.XPath.XPathExpression Compile (string xpath, System.Xml.IXmlNamespaceResolver nsResolver);
static member Compile : string * System.Xml.IXmlNamespaceResolver -> System.Xml.XPath.XPathExpression
Public Shared Function Compile (xpath As String, nsResolver As IXmlNamespaceResolver) As XPathExpression

参数

xpath
String

XPath 表达式。

nsResolver
IXmlNamespaceResolver

实现用于命名空间解析的 IXmlNamespaceResolver 接口的对象。

返回

XPathExpression

一个 XPathExpression 对象。

例外

XPath 表达式参数不是有效的 XPath 表达式。

XPath 表达式无效。

注解

计算 XPath 表达式以生成以下结果类型之一。

备注

如果在 XPath 表达式中指定了具有无效数量的参数 (的用户定义函数或未实现的用户定义函数) ,则仅在运行时发生异常。 在编译时不会检查用户定义的函数,并且仅当执行计算表达式时,才会发生用户定义的函数导致的异常。

备注

在一个步骤中,无法通过传递XsltContextIXmlNamespaceResolver实现的自定义上下文作为此方法的参数来编译XPathExpression自定义上下文。 若要对自定义上下文使用, XPathExpression 必须在编译表达式后调用 SetContext 该方法。

另请参阅

适用于