XPathExpression.SetContext 方法

定義

在衍生類別中覆寫時,指定 IXmlNamespaceResolver 物件用於命名空間解析。

多載

SetContext(IXmlNamespaceResolver)

在衍生類別中覆寫時,指定 IXmlNamespaceResolver 物件用於命名空間解析。

SetContext(XmlNamespaceManager)

在衍生類別中覆寫時,指定 XmlNamespaceManager 物件用於命名空間解析。

SetContext(IXmlNamespaceResolver)

來源:
XPathExpr.cs
來源:
XPathExpr.cs
來源:
XPathExpr.cs

在衍生類別中覆寫時,指定 IXmlNamespaceResolver 物件用於命名空間解析。

public abstract void SetContext (System.Xml.IXmlNamespaceResolver? nsResolver);
public abstract void SetContext (System.Xml.IXmlNamespaceResolver nsResolver);

參數

nsResolver
IXmlNamespaceResolver

實作 IXmlNamespaceResolver 介面的物件,用於命名空間解析。

例外狀況

範例

下列範例示範如何使用 XPath 傳回型別來判斷如何處理 XPath 運算式,以及如何使用 SetContext 方法來提供 XmlNamespaceManager 物件以進行命名空間解析。

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;
        }
    }
}

該範例採用 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>  

備註

使用實 IXmlNamespaceResolver 作 介面的類別支援命名空間解析,例如 XmlNamespaceManager 類別。 會 XmlNamespaceManager 儲存前置詞和命名空間統一資源識別元 (URI) 對應。 XPathExpression如果需要命名空間解析,則必須將前置詞和命名空間 URI 組新增至 物件,例如 XmlNamespaceManager 實作 介面的 類別 IXmlNamespaceResolver ,而且必須呼叫 方法來指定要 IXmlNamespaceResolver 用於命名空間解析的 SetContext 介面物件。

以下是使用 SetContext 方法時要考慮的重要注意事項。

另請參閱

適用於

.NET 9 及其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

SetContext(XmlNamespaceManager)

來源:
XPathExpr.cs
來源:
XPathExpr.cs
來源:
XPathExpr.cs

在衍生類別中覆寫時,指定 XmlNamespaceManager 物件用於命名空間解析。

public abstract void SetContext (System.Xml.XmlNamespaceManager nsManager);

參數

nsManager
XmlNamespaceManager

要用於命名空間解析的 XmlNamespaceManager 物件。

例外狀況

XmlNamespaceManager 物件參數並非衍生自 XmlNamespaceManager 類別。

範例

下列範例示範如何使用 XPath 傳回型別來判斷如何處理 XPath 運算式,以及如何使用 SetContext 方法來提供 XmlNamespaceManager 物件以進行命名空間解析。

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;
        }
    }
}

該範例採用 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>  

備註

使用 類別支援命名空間解析, XmlNamespaceManager 其會儲存前置詞和命名空間統一資源識別元 (URI) 對應。 XPathExpression如果需要命名空間解析,則必須將前置詞和命名空間 URI 配對新增至 XmlNamespaceManager 物件,而且 SetContext 必須呼叫 方法來指定要 XmlNamespaceManager 用於命名空間解析的物件。

以下是使用 SetContext 方法時要考慮的重要注意事項。

另請參閱

適用於

.NET 9 及其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1