XPathExpression.SetContext Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Podczas zastępowania w klasie pochodnej określa IXmlNamespaceResolver obiekt, który ma być używany do rozpoznawania przestrzeni nazw.
Przeciążenia
SetContext(IXmlNamespaceResolver) |
Podczas zastępowania w klasie pochodnej określa IXmlNamespaceResolver obiekt, który ma być używany do rozpoznawania przestrzeni nazw. |
SetContext(XmlNamespaceManager) |
Podczas zastępowania w klasie pochodnej określa XmlNamespaceManager obiekt, który ma być używany do rozpoznawania przestrzeni nazw. |
SetContext(IXmlNamespaceResolver)
Podczas zastępowania w klasie pochodnej określa IXmlNamespaceResolver obiekt, który ma być używany do rozpoznawania przestrzeni nazw.
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)
Parametry
- nsResolver
- IXmlNamespaceResolver
Obiekt, który implementuje IXmlNamespaceResolver interfejs do użycia na potrzeby rozpoznawania przestrzeni nazw.
Wyjątki
Parametr IXmlNamespaceResolver obiektu nie pochodzi z IXmlNamespaceResolver.
Przykłady
W poniższym przykładzie pokazano, jak za pomocą zwracanego typu XPath określić sposób przetwarzania wyrażenia XPath oraz jak za pomocą SetContext metody podać XmlNamespaceManager obiekt do rozpoznawania przestrzeni nazw.
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
W przykładzie plik jest pobierany contosoBooks.xml
jako dane wejściowe.
<?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>
Uwagi
Rozpoznawanie przestrzeni nazw jest obsługiwane przy użyciu klas implementujących IXmlNamespaceResolver interfejs, takich jak XmlNamespaceManager klasa. Przechowuje XmlNamespaceManager mapowania prefiksu i identyfikatora URI(URI) przestrzeni nazw. Jeśli wymagana XPathExpression jest rozdzielczość przestrzeni nazw, należy dodać parę identyfikatorów URI prefiksu i przestrzeni nazw do obiektu, takiego jak XmlNamespaceManager klasa, która implementuje IXmlNamespaceResolver interfejs, a SetContext metoda musi zostać wywołana, aby określić obiekt interfejsu IXmlNamespaceResolver do użycia na potrzeby rozpoznawania przestrzeni nazw.
Poniżej przedstawiono ważne uwagi, które należy wziąć pod uwagę podczas korzystania z SetContext metody .
Jeśli element XPathExpression nie zawiera prefiksu, przyjmuje się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz użyć SetContext metody i podać obiekt zawierający prefiks i identyfikator URI przestrzeni nazw do obsługi domyślnej przestrzeni nazw.
Można również podać obiekt interfejsu IXmlNamespaceResolver do rozpoznawania przestrzeni nazw do Compile metody podczas tworzenia XPathExpression obiektu.
SetContext akceptuje jako rozpoznawanie XsltContext przestrzeni nazw, więc można zaimplementować kontekst niestandardowy i używać funkcji i zmiennych na IXsltContextFunction podstawie elementów i IXsltContextVariable. Wyrażenie XPath wykona je. Aby uzyskać więcej informacji, zobacz Funkcje i zmienne zdefiniowane przez użytkownika.
Zobacz też
- SetContext(XmlNamespaceManager)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Funkcje i zmienne zdefiniowane przez użytkownika
Dotyczy
SetContext(XmlNamespaceManager)
Podczas zastępowania w klasie pochodnej określa XmlNamespaceManager obiekt, który ma być używany do rozpoznawania przestrzeni nazw.
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)
Parametry
- nsManager
- XmlNamespaceManager
Obiekt używany do rozpoznawania XmlNamespaceManager przestrzeni nazw.
Wyjątki
Parametr XmlNamespaceManager obiektu nie pochodzi z XmlNamespaceManager klasy .
Przykłady
W poniższym przykładzie pokazano, jak za pomocą zwracanego typu XPath określić sposób przetwarzania wyrażenia XPath oraz jak za pomocą SetContext metody podać XmlNamespaceManager obiekt do rozpoznawania przestrzeni nazw.
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
W przykładzie plik jest pobierany contosoBooks.xml
jako dane wejściowe.
<?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>
Uwagi
Rozpoznawanie przestrzeni nazw jest obsługiwane przy użyciu XmlNamespaceManager klasy, która przechowuje mapowania prefiksu i identyfikatora URI (Namespace Uniform Resource Identifier). Jeśli wymagana XPathExpression jest rozdzielczość przestrzeni nazw, należy dodać parę identyfikatorów URI prefiksu i przestrzeni nazw do XmlNamespaceManager obiektu, a SetContext metoda musi zostać wywołana, aby określić XmlNamespaceManager obiekt do użycia na potrzeby rozpoznawania przestrzeni nazw.
Poniżej przedstawiono ważne uwagi, które należy wziąć pod uwagę podczas korzystania z SetContext metody .
Jeśli element XPathExpression nie zawiera prefiksu, przyjmuje się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz użyć SetContext metody i podać XmlNamespaceManager obiekt zawierający prefiks i identyfikator URI przestrzeni nazw do obsługi domyślnej przestrzeni nazw.
Można również podać IXmlNamespaceResolver obiekt rozpoznawania przestrzeni nazw do Compile metody podczas tworzenia XPathExpression obiektu.
SetContext akceptuje jako rozpoznawanie XsltContext przestrzeni nazw, więc można zaimplementować kontekst niestandardowy i używać funkcji i zmiennych na IXsltContextFunction podstawie elementów i IXsltContextVariable. Wyrażenie XPath wykona je. Aby uzyskać więcej informacji, zobacz Funkcje i zmienne zdefiniowane przez użytkownika.
Zobacz też
- XmlNamespaceManager
- SetContext(IXmlNamespaceResolver)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Funkcje i zmienne zdefiniowane przez użytkownika