XPathExpression.SetContext Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Quando substituído em uma classe derivada, especifica o objeto IXmlNamespaceResolver a ser usado para resolução de namespace.
Sobrecargas
SetContext(IXmlNamespaceResolver) |
Quando substituído em uma classe derivada, especifica o objeto IXmlNamespaceResolver a ser usado para resolução de namespace. |
SetContext(XmlNamespaceManager) |
Quando substituído em uma classe derivada, especifica o objeto XmlNamespaceManager a ser usado para resolução de namespace. |
SetContext(IXmlNamespaceResolver)
- Origem:
- XPathExpr.cs
- Origem:
- XPathExpr.cs
- Origem:
- XPathExpr.cs
Quando substituído em uma classe derivada, especifica o objeto IXmlNamespaceResolver a ser usado para resolução de namespace.
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)
Parâmetros
- nsResolver
- IXmlNamespaceResolver
Um objeto que implementa a interface IXmlNamespaceResolver a ser usada para resolução de namespaces.
Exceções
O parâmetro de objeto IXmlNamespaceResolver não é derivado de IXmlNamespaceResolver.
Exemplos
O exemplo a seguir mostra como usar o tipo de retorno XPath para determinar como processar a expressão XPath e como usar o SetContext método para fornecer um XmlNamespaceManager objeto para resolução de namespace.
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
O exemplo usa o arquivo contosoBooks.xml
como entrada.
<?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>
Comentários
Há suporte para a resolução de namespace usando classes que implementam a IXmlNamespaceResolver interface, como a XmlNamespaceManager classe . O XmlNamespaceManager armazena mapeamentos de URI (Uniform Resource Identifier) de prefixo e namespace. Se o exigir resolução de XPathExpression namespace, o par de URI de prefixo e namespace deverá ser adicionado a um objeto, como a XmlNamespaceManager classe , que implementa a IXmlNamespaceResolver interface, e o SetContext método deve ser chamado para especificar o objeto de IXmlNamespaceResolver interface a ser usado para resolução de namespace.
Veja a seguir notas importantes a serem consideradas ao usar o SetContext método .
Se o XPathExpression não incluir um prefixo, supõe-se que o URI do namespace seja o namespace vazio. Se o XML incluir um namespace padrão, você ainda deverá usar o SetContext método e fornecer um objeto que contenha um prefixo e um URI de namespace para lidar com o namespace padrão.
Você também pode fornecer um IXmlNamespaceResolver objeto de interface para resolução de namespace para o Compile método ao criar seu XPathExpression objeto.
SetContext XsltContext aceita como um resolvedor de namespace, para que você possa implementar um contexto personalizado e usar funções e variáveis com base em IXsltContextFunction e IXsltContextVariable. A expressão XPath as executará. Para obter mais informações, consulte Funções e variáveis definidas pelo usuário.
Confira também
- SetContext(XmlNamespaceManager)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Funções definidas pelo usuário e variáveis
Aplica-se a
SetContext(XmlNamespaceManager)
- Origem:
- XPathExpr.cs
- Origem:
- XPathExpr.cs
- Origem:
- XPathExpr.cs
Quando substituído em uma classe derivada, especifica o objeto XmlNamespaceManager a ser usado para resolução de namespace.
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)
Parâmetros
- nsManager
- XmlNamespaceManager
Um objeto XmlNamespaceManager a ser usado para resolução de namespace.
Exceções
O parâmetro de objeto XmlNamespaceManager não é derivado da classe XmlNamespaceManager.
Exemplos
O exemplo a seguir mostra como usar o tipo de retorno XPath para determinar como processar a expressão XPath e como usar o SetContext método para fornecer um XmlNamespaceManager objeto para resolução de namespace.
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
O exemplo usa o arquivo contosoBooks.xml
como entrada.
<?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>
Comentários
Há suporte para a resolução de namespace usando a XmlNamespaceManager classe que armazena mapeamentos de URI (Uniform Resource Identifier) de prefixo e namespace. Se o exigir resolução de XPathExpression namespace, o par de URI de prefixo e namespace deverá ser adicionado ao XmlNamespaceManager objeto e o SetContext método deverá ser chamado para especificar o XmlNamespaceManager objeto a ser usado para resolução de namespace.
Veja a seguir notas importantes a serem consideradas ao usar o SetContext método .
Se o XPathExpression não incluir um prefixo, supõe-se que o URI do namespace seja o namespace vazio. Se o XML incluir um namespace padrão, você ainda deverá usar o SetContext método e fornecer um XmlNamespaceManager objeto que contenha um prefixo e um URI de namespace para lidar com o namespace padrão.
Você também pode fornecer um IXmlNamespaceResolver objeto para resolução de namespace para o Compile método ao criar seu XPathExpression objeto.
SetContext XsltContext aceita como um resolvedor de namespace, para que você possa implementar um contexto personalizado e usar funções e variáveis com base em IXsltContextFunction e IXsltContextVariable. A expressão XPath as executará. Para obter mais informações, consulte Funções e variáveis definidas pelo usuário.
Confira também
- XmlNamespaceManager
- SetContext(IXmlNamespaceResolver)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Funções definidas pelo usuário e variáveis