XPathExpression.SetContext 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在衍生類別中覆寫時,指定 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);
public abstract void SetContext (System.Xml.IXmlNamespaceResolver nsResolver);
abstract member SetContext : System.Xml.IXmlNamespaceResolver -> unit
Public MustOverride Sub SetContext (nsResolver As IXmlNamespaceResolver)
參數
- nsResolver
- IXmlNamespaceResolver
實作 IXmlNamespaceResolver 介面的物件,用於命名空間解析。
例外狀況
範例
下列範例示範如何使用 XPath 傳回型別來判斷如何處理 XPath 運算式,以及如何使用 SetContext 方法來提供 XmlNamespaceManager 物件以進行命名空間解析。
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>
備註
使用實 IXmlNamespaceResolver 作 介面的類別支援命名空間解析,例如 XmlNamespaceManager 類別。 會 XmlNamespaceManager 儲存前置詞和命名空間統一資源識別元 (URI) 對應。 XPathExpression如果需要命名空間解析,則必須將前置詞和命名空間 URI 組新增至 物件,例如 XmlNamespaceManager 實作 介面的 類別 IXmlNamespaceResolver ,而且必須呼叫 方法來指定要 IXmlNamespaceResolver 用於命名空間解析的 SetContext 介面物件。
以下是使用 SetContext 方法時要考慮的重要注意事項。
XPathExpression如果 不包含前置詞,則會假設命名空間 URI 是空的命名空間。 如果您的 XML 包含預設命名空間,您仍 SetContext 必須使用 方法,並提供包含前置詞和命名空間 URI 的物件來處理預設命名空間。
您也可以在 IXmlNamespaceResolver 建立 XPathExpression 物件時提供介面物件, Compile 以便將命名空間解析提供給 方法。
SetContext接受 XsltContext 作為命名空間解析程式,因此您可以實作自訂內容,並根據 和 IXsltContextVariable 使用函式和變數 IXsltContextFunction 。 XPath 運算式會執行它們。 如需詳細資訊,請參閱 使用者定義函數和變數。
另請參閱
- SetContext(XmlNamespaceManager)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- 使用者定義函式和變數
適用於
SetContext(XmlNamespaceManager)
- 來源:
- XPathExpr.cs
- 來源:
- XPathExpr.cs
- 來源:
- XPathExpr.cs
在衍生類別中覆寫時,指定 XmlNamespaceManager 物件用於命名空間解析。
public:
abstract void SetContext(System::Xml::XmlNamespaceManager ^ nsManager);
public abstract void SetContext (System.Xml.XmlNamespaceManager nsManager);
abstract member SetContext : System.Xml.XmlNamespaceManager -> unit
Public MustOverride Sub SetContext (nsManager As XmlNamespaceManager)
參數
- nsManager
- XmlNamespaceManager
要用於命名空間解析的 XmlNamespaceManager 物件。
例外狀況
XmlNamespaceManager 物件參數並非衍生自 XmlNamespaceManager 類別。
範例
下列範例示範如何使用 XPath 傳回型別來判斷如何處理 XPath 運算式,以及如何使用 SetContext 方法來提供 XmlNamespaceManager 物件以進行命名空間解析。
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>
備註
使用 類別支援命名空間解析, XmlNamespaceManager 其會儲存前置詞和命名空間統一資源識別元 (URI) 對應。 XPathExpression如果需要命名空間解析,則必須將前置詞和命名空間 URI 配對新增至 XmlNamespaceManager 物件,而且 SetContext 必須呼叫 方法來指定要 XmlNamespaceManager 用於命名空間解析的物件。
以下是使用 SetContext 方法時要考慮的重要注意事項。
XPathExpression如果 不包含前置詞,則會假設命名空間 URI 是空的命名空間。 如果您的 XML 包含預設命名空間,您仍 SetContext 必須使用 方法,並提供 XmlNamespaceManager 包含前置詞和命名空間 URI 的物件來處理預設命名空間。
當您建立 XPathExpression 物件時,您也可以提供 IXmlNamespaceResolver 物件來解析 Compile 命名空間給 方法。
SetContext接受 XsltContext 作為命名空間解析程式,因此您可以實作自訂內容,並根據 和 IXsltContextVariable 使用函式和變數 IXsltContextFunction 。 XPath 運算式會執行它們。 如需詳細資訊,請參閱 使用者定義函數和變數。
另請參閱
- XmlNamespaceManager
- SetContext(IXmlNamespaceResolver)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- 使用者定義函式和變數