XPathExpression.SetContext Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt beim Überschreiben in einer abgeleiteten Klasse das zum Auflösen von Namespaces zu verwendende IXmlNamespaceResolver-Objekt an.
Überlädt
SetContext(IXmlNamespaceResolver) |
Gibt beim Überschreiben in einer abgeleiteten Klasse das zum Auflösen von Namespaces zu verwendende IXmlNamespaceResolver-Objekt an. |
SetContext(XmlNamespaceManager) |
Gibt beim Überschreiben in einer abgeleiteten Klasse das zum Auflösen von Namespaces zu verwendende XmlNamespaceManager-Objekt an. |
SetContext(IXmlNamespaceResolver)
- Quelle:
- XPathExpr.cs
- Quelle:
- XPathExpr.cs
- Quelle:
- XPathExpr.cs
Gibt beim Überschreiben in einer abgeleiteten Klasse das zum Auflösen von Namespaces zu verwendende IXmlNamespaceResolver-Objekt an.
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)
Parameter
- nsResolver
- IXmlNamespaceResolver
Ein Objekt, das die zum Auflösen von Namespaces zu verwendende IXmlNamespaceResolver-Schnittstelle implementiert.
Ausnahmen
Der IXmlNamespaceResolver-Objektparameter wurde nicht vom IXmlNamespaceResolver abgeleitet.
Beispiele
Im folgenden Beispiel wird gezeigt, wie der XPath-Rückgabetyp verwendet wird, um zu bestimmen, wie der XPath-Ausdruck verarbeitet wird, und wie die SetContext -Methode verwendet wird, um ein Objekt für die XmlNamespaceManager Namespaceauflösung bereitzustellen.
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
In diesem Beispiel wird die Datei contosoBooks.xml
als Eingabe verwendet.
<?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>
Hinweise
Die Namespaceauflösung wird mithilfe von Klassen unterstützt, die die IXmlNamespaceResolver -Schnittstelle implementieren, z. B. die XmlNamespaceManager -Klasse. Speichert XmlNamespaceManager Präfix- und Namespacezuordnungen für den Uniform Resource Identifier (URI). Wenn eine XPathExpression Namespaceauflösung erforderlich ist, muss das Präfix- und Namespace-URI-Paar einem Objekt hinzugefügt werden, z. B. der XmlNamespaceManager -Klasse, die die IXmlNamespaceResolver -Schnittstelle implementiert, und die SetContext -Methode muss aufgerufen werden, um das Schnittstellenobjekt anzugeben, das für die IXmlNamespaceResolver Namespaceauflösung verwendet werden soll.
Im Folgenden finden Sie wichtige Hinweise, die Sie bei der Verwendung der SetContext -Methode berücksichtigen sollten.
Wenn das XPathExpression kein Präfix enthält, wird davon ausgegangen, dass der Namespace-URI der leere Namespace ist. Wenn Ihr XML-Code einen Standardnamespace enthält, müssen Sie weiterhin die SetContext -Methode verwenden und ein -Objekt bereitstellen, das ein Präfix und einen Namespace-URI enthält, um den Standardnamespace zu verarbeiten.
Sie können auch ein IXmlNamespaceResolver Schnittstellenobjekt für die Namespaceauflösung für die Compile -Methode bereitstellen, wenn Sie ihr XPathExpression Objekt erstellen.
SetContext akzeptiert XsltContext als Namespace-Resolver, sodass Sie einen benutzerdefinierten Kontext implementieren und Funktionen und Variablen basierend auf IXsltContextFunction und IXsltContextVariableverwenden können. Der XPath-Ausdruck führt sie aus. Weitere Informationen finden Sie unter Benutzerdefinierte Funktionen und Variablen.
Weitere Informationen
- SetContext(XmlNamespaceManager)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Benutzerdefinierte Funktionen und Variablen
Gilt für:
SetContext(XmlNamespaceManager)
- Quelle:
- XPathExpr.cs
- Quelle:
- XPathExpr.cs
- Quelle:
- XPathExpr.cs
Gibt beim Überschreiben in einer abgeleiteten Klasse das zum Auflösen von Namespaces zu verwendende XmlNamespaceManager-Objekt an.
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)
Parameter
- nsManager
- XmlNamespaceManager
Ein XmlNamespaceManager-Objekt, das für die Auflösung von Namespaces verwendet werden soll.
Ausnahmen
Der XmlNamespaceManager-Objektparameter ist nicht von der XmlNamespaceManager-Klasse abgeleitet.
Beispiele
Im folgenden Beispiel wird gezeigt, wie der XPath-Rückgabetyp verwendet wird, um zu bestimmen, wie der XPath-Ausdruck verarbeitet wird, und wie die SetContext -Methode verwendet wird, um ein Objekt für die XmlNamespaceManager Namespaceauflösung bereitzustellen.
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
In diesem Beispiel wird die Datei contosoBooks.xml
als Eingabe verwendet.
<?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>
Hinweise
Die Namespaceauflösung wird mithilfe der -Klasse unterstützt, die XmlNamespaceManager Präfix- und Namespace-URI-Zuordnungen (Uniform Resource Identifier) speichert. Wenn eine XPathExpression Namespaceauflösung erforderlich ist, müssen dem Objekt das Präfix und das XmlNamespaceManager Namespace-URI-Paar hinzugefügt werden, und die SetContext -Methode muss aufgerufen werden, um das für die XmlNamespaceManager Namespaceauflösung zu verwendende Objekt anzugeben.
Im Folgenden finden Sie wichtige Hinweise, die Sie bei der Verwendung der SetContext -Methode berücksichtigen sollten.
Wenn das XPathExpression kein Präfix enthält, wird davon ausgegangen, dass der Namespace-URI der leere Namespace ist. Wenn Ihr XML-Code einen Standardnamespace enthält, müssen Sie weiterhin die SetContext -Methode verwenden und ein XmlNamespaceManager -Objekt bereitstellen, das ein Präfix und einen Namespace-URI enthält, um den Standardnamespace zu verarbeiten.
Sie können auch ein IXmlNamespaceResolver Objekt für die Namespaceauflösung für die Compile -Methode bereitstellen, wenn Sie ihr XPathExpression Objekt erstellen.
SetContext akzeptiert XsltContext als Namespace-Resolver, sodass Sie einen benutzerdefinierten Kontext implementieren und Funktionen und Variablen basierend auf IXsltContextFunction und IXsltContextVariableverwenden können. Der XPath-Ausdruck führt sie aus. Weitere Informationen finden Sie unter Benutzerdefinierte Funktionen und Variablen.
Weitere Informationen
- XmlNamespaceManager
- SetContext(IXmlNamespaceResolver)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Benutzerdefinierte Funktionen und Variablen