XPathExpression.SetContext Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Cuando se reemplaza en una clase derivada, especifica el objeto IXmlNamespaceResolver que se va a usar para la resolución del espacio de nombres.
Sobrecargas
SetContext(IXmlNamespaceResolver) |
Cuando se reemplaza en una clase derivada, especifica el objeto IXmlNamespaceResolver que se va a usar para la resolución del espacio de nombres. |
SetContext(XmlNamespaceManager) |
Cuando se reemplaza en una clase derivada, especifica el objeto XmlNamespaceManager que se va a usar para la resolución del espacio de nombres. |
SetContext(IXmlNamespaceResolver)
Cuando se reemplaza en una clase derivada, especifica el objeto IXmlNamespaceResolver que se va a usar para la resolución del espacio de nombres.
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
Objeto que implementa la interfaz IXmlNamespaceResolver que se usa para la resolución del espacio de nombres.
Excepciones
El parámetro del objeto IXmlNamespaceResolver no se deriva de IXmlNamespaceResolver.
Ejemplos
En el ejemplo siguiente se muestra cómo usar el tipo de valor devuelto XPath para determinar cómo procesar la expresión XPath y cómo usar el SetContext método para proporcionar un XmlNamespaceManager objeto para la resolución del espacio de nombres.
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
En el ejemplo se toma como entrada el archivo 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>
Comentarios
La resolución de espacios de nombres se admite mediante clases que implementan la IXmlNamespaceResolver interfaz, como la XmlNamespaceManager clase . Almacena XmlNamespaceManager asignaciones de identificador uniforme de recursos (URI) de prefijo y espacio de nombres. XPathExpression Si requiere resolución de espacio de nombres, se debe agregar el par de URI de prefijo y espacio de nombres a un objeto, como la XmlNamespaceManager clase , que implementa la IXmlNamespaceResolver interfaz y se SetContext debe llamar al método para especificar el objeto de IXmlNamespaceResolver interfaz que se va a usar para la resolución del espacio de nombres.
A continuación se muestran notas importantes que se deben tener en cuenta al usar el SetContext método .
XPathExpression Si no incluye un prefijo, se supone que el URI del espacio de nombres es el espacio de nombres vacío. Si el XML incluye un espacio de nombres predeterminado, debe seguir usando el SetContext método y proporcionar un objeto que contenga un prefijo y un URI de espacio de nombres para controlar el espacio de nombres predeterminado.
También puede proporcionar un IXmlNamespaceResolver objeto de interfaz para la resolución del espacio de nombres al método al crear el Compile XPathExpression objeto.
SetContextXsltContext acepta como solucionador de espacios de nombres, por lo que puede implementar un contexto personalizado y usar funciones y variables basadas en IXsltContextFunction y IXsltContextVariable. La expresión XPath las ejecutará. Para obtener más información, vea Funciones y variables definidas por el usuario.
Consulte también
- SetContext(XmlNamespaceManager)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Funciones y variables definidas por el usuario
Se aplica a
SetContext(XmlNamespaceManager)
Cuando se reemplaza en una clase derivada, especifica el objeto XmlNamespaceManager que se va a usar para la resolución del espacio de nombres.
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
Objeto XmlNamespaceManager que se usa para la resolución del espacio de nombres.
Excepciones
El parámetro de objeto XmlNamespaceManager no se deriva de la clase XmlNamespaceManager.
Ejemplos
En el ejemplo siguiente se muestra cómo usar el tipo de valor devuelto XPath para determinar cómo procesar la expresión XPath y cómo usar el SetContext método para proporcionar un XmlNamespaceManager objeto para la resolución del espacio de nombres.
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
En el ejemplo se toma como entrada el archivo 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>
Comentarios
La resolución de espacios de nombres se admite mediante la XmlNamespaceManager clase que almacena asignaciones de identificador uniforme de recursos (URI) de prefijo y espacio de nombres. Si requiere resolución XPathExpression de espacio de nombres, se debe agregar el par de URI de prefijo y espacio de nombres al objeto y se SetContext debe llamar al XmlNamespaceManager método para especificar el XmlNamespaceManager objeto que se va a usar para la resolución del espacio de nombres.
A continuación se muestran notas importantes que se deben tener en cuenta al usar el SetContext método .
XPathExpression Si no incluye un prefijo, se supone que el URI del espacio de nombres es el espacio de nombres vacío. Si el XML incluye un espacio de nombres predeterminado, debe seguir usando el SetContext método y proporcionar un XmlNamespaceManager objeto que contenga un prefijo y un URI de espacio de nombres para controlar el espacio de nombres predeterminado.
También puede proporcionar un IXmlNamespaceResolver objeto para la resolución del espacio de nombres al método al crear el XPathExpression Compile objeto.
SetContextXsltContext acepta como solucionador de espacios de nombres, por lo que puede implementar un contexto personalizado y usar funciones y variables basadas en IXsltContextFunction y IXsltContextVariable. La expresión XPath las ejecutará. Para obtener más información, vea Funciones y variables definidas por el usuario.
Consulte también
- XmlNamespaceManager
- SetContext(IXmlNamespaceResolver)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Funciones y variables definidas por el usuario