XPathExpression.SetContext Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Quando è sottoposto a override in una classe derivata, specifica l'oggetto IXmlNamespaceResolver da usare per la risoluzione dello spazio dei nomi.
Overload
SetContext(IXmlNamespaceResolver) |
Quando è sottoposto a override in una classe derivata, specifica l'oggetto IXmlNamespaceResolver da usare per la risoluzione dello spazio dei nomi. |
SetContext(XmlNamespaceManager) |
Quando è sottoposto a override in una classe derivata, specifica l'oggetto XmlNamespaceManager da usare per la risoluzione dello spazio dei nomi. |
SetContext(IXmlNamespaceResolver)
Quando è sottoposto a override in una classe derivata, specifica l'oggetto IXmlNamespaceResolver da usare per la risoluzione dello spazio dei nomi.
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)
Parametri
- nsResolver
- IXmlNamespaceResolver
Oggetto che implementa l'interfaccia IXmlNamespaceResolver da usare per la risoluzione dello spazio dei nomi.
Eccezioni
Il parametro dell'oggetto IXmlNamespaceResolver non è derivato da IXmlNamespaceResolver.
Esempio
Nell'esempio seguente viene illustrato come usare il tipo restituito XPath per determinare come elaborare l'espressione XPath e come usare il SetContext metodo per fornire un XmlNamespaceManager oggetto per la risoluzione dello spazio dei nomi.
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
Nell'esempio il file contosoBooks.xml
viene considerato come input.
<?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>
Commenti
La risoluzione dello spazio dei nomi è supportata usando classi che implementano l'interfaccia IXmlNamespaceResolver , ad esempio la XmlNamespaceManager classe . Archivia XmlNamespaceManager i mapping URI (Uniform Resource Identifier) del prefisso e dello spazio dei nomi. XPathExpression Se la risoluzione dello spazio dei nomi richiede la risoluzione dello spazio dei nomi, il prefisso e la coppia URI dello spazio dei nomi devono essere aggiunti a un oggetto, ad esempio la XmlNamespaceManager classe, che implementa l'interfaccia e il SetContext metodo deve essere chiamato per specificare l'oggetto IXmlNamespaceResolver IXmlNamespaceResolver interfaccia da usare per la risoluzione dello spazio dei nomi.
Di seguito sono riportate note importanti da considerare quando si usa il SetContext metodo .
Se non include un prefisso, si presuppone che l'URI XPathExpression dello spazio dei nomi sia lo spazio dei nomi vuoto. Se il codice XML include uno spazio dei nomi predefinito, è comunque necessario usare il SetContext metodo e specificare un oggetto contenente un prefisso e un URI dello spazio dei nomi per gestire lo spazio dei nomi predefinito.
È anche possibile specificare un IXmlNamespaceResolver oggetto interfaccia per la risoluzione dello spazio dei nomi al metodo quando si crea l'oggetto Compile XPathExpression .
SetContext accetta XsltContext come resolver dello spazio dei nomi, in modo da poter implementare un contesto personalizzato e usare funzioni e variabili basate su IXsltContextFunction e IXsltContextVariable. L'espressione XPath li eseguirà. Per altre informazioni, vedere Funzioni e variabili definite dall'utente.
Vedi anche
- SetContext(XmlNamespaceManager)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Funzioni e variabili definite dall'utente
Si applica a
SetContext(XmlNamespaceManager)
Quando è sottoposto a override in una classe derivata, specifica l'oggetto XmlNamespaceManager da usare per la risoluzione dello spazio dei nomi.
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)
Parametri
- nsManager
- XmlNamespaceManager
Oggetto XmlNamespaceManager da usare per la risoluzione dello spazio dei nomi.
Eccezioni
Il parametro dell'oggetto XmlNamespaceManager non è derivato dalla classe XmlNamespaceManager.
Esempio
Nell'esempio seguente viene illustrato come usare il tipo restituito XPath per determinare come elaborare l'espressione XPath e come usare il SetContext metodo per fornire un XmlNamespaceManager oggetto per la risoluzione dello spazio dei nomi.
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
Nell'esempio il file contosoBooks.xml
viene considerato come input.
<?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>
Commenti
La risoluzione dello spazio dei nomi è supportata usando la XmlNamespaceManager classe che archivia i mapping URI (Uniform Resource Identifier) del prefisso e dello spazio dei nomi. Se la XPathExpression risoluzione dello spazio dei nomi richiede la risoluzione dello spazio dei nomi, il prefisso e la coppia URI dello spazio dei nomi deve essere aggiunta all'oggetto XmlNamespaceManager e il SetContext metodo deve essere chiamato per specificare l'oggetto XmlNamespaceManager da usare per la risoluzione dello spazio dei nomi.
Di seguito sono riportate note importanti da considerare quando si usa il SetContext metodo .
Se non include un prefisso, si presuppone che l'URI XPathExpression dello spazio dei nomi sia lo spazio dei nomi vuoto. Se il codice XML include uno spazio dei nomi predefinito, è comunque necessario usare il SetContext metodo e specificare un oggetto contenente un prefisso e un XmlNamespaceManager URI dello spazio dei nomi per gestire lo spazio dei nomi predefinito.
È anche possibile specificare un IXmlNamespaceResolver oggetto per la risoluzione dello spazio dei nomi al metodo quando si crea l'oggetto Compile XPathExpression .
SetContext accetta XsltContext come resolver dello spazio dei nomi, in modo da poter implementare un contesto personalizzato e usare funzioni e variabili basate su IXsltContextFunction e IXsltContextVariable. L'espressione XPath li eseguirà. Per altre informazioni, vedere Funzioni e variabili definite dall'utente.
Vedi anche
- XmlNamespaceManager
- SetContext(IXmlNamespaceResolver)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Funzioni e variabili definite dall'utente