XPathExpression.SetContext Methode

Definition

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird das objekt angegeben, das für die IXmlNamespaceResolver Namespaceauflösung verwendet werden soll.

Überlädt

Name Beschreibung
SetContext(IXmlNamespaceResolver)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird das objekt angegeben, das für die IXmlNamespaceResolver Namespaceauflösung verwendet werden soll.

SetContext(XmlNamespaceManager)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird das objekt angegeben, das für die XmlNamespaceManager Namespaceauflösung verwendet werden soll.

SetContext(IXmlNamespaceResolver)

Quelle:
XPathExpr.cs
Quelle:
XPathExpr.cs
Quelle:
XPathExpr.cs
Quelle:
XPathExpr.cs
Quelle:
XPathExpr.cs

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird das objekt angegeben, das für die IXmlNamespaceResolver Namespaceauflösung verwendet werden soll.

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 Schnittstelle implementiert, die für die IXmlNamespaceResolver Namespaceauflösung verwendet werden soll.

Ausnahmen

Der IXmlNamespaceResolver Objektparameter wird nicht von IXmlNamespaceResolver.

Beispiele

Das folgende Beispiel zeigt, wie der XPath-Rückgabetyp verwendet wird, um zu bestimmen, wie der XPath-Ausdruck verarbeitet wird, und wie die Methode verwendet wird, um ein SetContext 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

Im Beispiel wird die contosoBooks.xml Datei 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. Die XmlNamespaceManager Präfix- und Namespace-URI-Zuordnungen (Uniform Resource Identifier) werden gespeichert. Wenn die 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 für die IXmlNamespaceResolver Namespaceauflösung zu verwendende Schnittstellenobjekt anzugeben.

Im Folgenden finden Sie wichtige Hinweise, die Sie bei der Verwendung der SetContext Methode berücksichtigen sollten.

  • Wenn das XPathExpression Präfix nicht enthalten ist, wird davon ausgegangen, dass der Namespace-URI der leere Namespace ist. Wenn Ihr XML einen Standardnamespace enthält, müssen Sie die SetContext Methode weiterhin 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 das 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

Gilt für:

SetContext(XmlNamespaceManager)

Quelle:
XPathExpr.cs
Quelle:
XPathExpr.cs
Quelle:
XPathExpr.cs
Quelle:
XPathExpr.cs
Quelle:
XPathExpr.cs

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird das objekt angegeben, das für die XmlNamespaceManager Namespaceauflösung verwendet werden soll.

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 Namespaceauflösung verwendet werden soll.

Ausnahmen

Der XmlNamespaceManager Objektparameter wird nicht von der XmlNamespaceManager Klasse abgeleitet.

Beispiele

Das folgende Beispiel zeigt, wie der XPath-Rückgabetyp verwendet wird, um zu bestimmen, wie der XPath-Ausdruck verarbeitet wird, und wie die Methode verwendet wird, um ein SetContext 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

Im Beispiel wird die contosoBooks.xml Datei 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 die XPathExpression Namespaceauflösung erforderlich ist, muss das Präfix- und Namespace-URI-Paar dem XmlNamespaceManager Objekt hinzugefügt werden, und die SetContext Methode muss aufgerufen werden, um das objekt anzugeben, das für die XmlNamespaceManager Namespaceauflösung verwendet werden soll.

Im Folgenden finden Sie wichtige Hinweise, die Sie bei der Verwendung der SetContext Methode berücksichtigen sollten.

Weitere Informationen

Gilt für: