XPathExpression.SetContext Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Při přepsání v odvozené třídě určuje IXmlNamespaceResolver objekt, který se má použít pro rozlišení oboru názvů.
Přetížení
| Name | Description |
|---|---|
| SetContext(IXmlNamespaceResolver) |
Při přepsání v odvozené třídě určuje IXmlNamespaceResolver objekt, který se má použít pro rozlišení oboru názvů. |
| SetContext(XmlNamespaceManager) |
Při přepsání v odvozené třídě určuje XmlNamespaceManager objekt, který se má použít pro rozlišení oboru názvů. |
SetContext(IXmlNamespaceResolver)
- Zdroj:
- XPathExpr.cs
- Zdroj:
- XPathExpr.cs
- Zdroj:
- XPathExpr.cs
- Zdroj:
- XPathExpr.cs
- Zdroj:
- XPathExpr.cs
Při přepsání v odvozené třídě určuje IXmlNamespaceResolver objekt, který se má použít pro rozlišení oboru názvů.
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)
Parametry
- nsResolver
- IXmlNamespaceResolver
Objekt, který implementuje IXmlNamespaceResolver rozhraní pro překlad oboru názvů.
Výjimky
Parametr IXmlNamespaceResolver objektu není odvozen z IXmlNamespaceResolver.
Příklady
Následující příklad ukazuje, jak pomocí návratového typu XPath určit, jak zpracovat výraz XPath a jak použít metodu SetContext k poskytnutí XmlNamespaceManager objektu pro překlad oboru názvů.
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
Příklad přebírá contosoBooks.xml soubor jako vstup.
<?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>
Poznámky
Překlad oboru názvů se podporuje pomocí tříd, které implementují IXmlNamespaceResolver rozhraní, jako XmlNamespaceManager je například třída. Ukládá XmlNamespaceManager mapování předpony a oboru názvů URI (Uniform Resource Identifier). XPathExpression Pokud vyžaduje rozlišení oboru názvů, musí být do objektu přidána dvojice předpony a identifikátoru URI oboru názvů, jako XmlNamespaceManager je třída, která implementuje IXmlNamespaceResolver rozhraní, a SetContext metoda musí být volána k určení IXmlNamespaceResolver objektu rozhraní, který se má použít pro rozlišení oboru názvů.
Při použití SetContext této metody je potřeba vzít v úvahu následující důležité poznámky.
Pokud předpona XPathExpression neobsahuje, předpokládá se, že identifikátor URI oboru názvů je prázdný obor názvů. Pokud xml obsahuje výchozí obor názvů, musíte stále použít metodu SetContext a poskytnout objekt, který obsahuje předponu a identifikátor URI oboru názvů pro zpracování výchozího oboru názvů.
Objekt rozhraní můžete také zadat IXmlNamespaceResolver pro překlad Compile oboru názvů metodě při vytváření XPathExpression objektu.
SetContext přijímá XsltContext jako překladač oboru názvů, takže můžete implementovat vlastní kontext a používat funkce a proměnné založené na IXsltContextFunction a IXsltContextVariable. Výraz XPath je spustí. Další informace naleznete v tématu Uživatelem definované funkce a proměnné.
Viz také
- SetContext(XmlNamespaceManager)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Uživatelem definované funkce a proměnné
Platí pro
SetContext(XmlNamespaceManager)
- Zdroj:
- XPathExpr.cs
- Zdroj:
- XPathExpr.cs
- Zdroj:
- XPathExpr.cs
- Zdroj:
- XPathExpr.cs
- Zdroj:
- XPathExpr.cs
Při přepsání v odvozené třídě určuje XmlNamespaceManager objekt, který se má použít pro rozlišení oboru názvů.
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)
Parametry
- nsManager
- XmlNamespaceManager
Objekt XmlNamespaceManager , který se má použít pro překlad oboru názvů.
Výjimky
Parametr XmlNamespaceManager objektu XmlNamespaceManager není odvozen z třídy.
Příklady
Následující příklad ukazuje, jak pomocí návratového typu XPath určit, jak zpracovat výraz XPath a jak použít metodu SetContext k poskytnutí XmlNamespaceManager objektu pro překlad oboru názvů.
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
Příklad přebírá contosoBooks.xml soubor jako vstup.
<?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>
Poznámky
Rozlišení oboru názvů se podporuje pomocí XmlNamespaceManager třídy, ve které se ukládají mapování předpony a oboru názvů URI (Uniform Resource Identifier). XPathExpression Pokud vyžaduje rozlišení oboru názvů, musí být do objektu přidán XmlNamespaceManager pár identifikátorů URI předpony a URI oboru názvů a SetContext metoda musí být volána k určení objektuXmlNamespaceManager, který se má použít pro rozlišení oboru názvů.
Při použití SetContext této metody je potřeba vzít v úvahu následující důležité poznámky.
Pokud předpona XPathExpression neobsahuje, předpokládá se, že identifikátor URI oboru názvů je prázdný obor názvů. Pokud xml obsahuje výchozí obor názvů, musíte stále použít metodu SetContext a poskytnout XmlNamespaceManager objekt, který obsahuje předponu a identifikátor URI oboru názvů pro zpracování výchozího oboru názvů.
Objekt můžete také zadat IXmlNamespaceResolver pro překlad oboru názvů metodě Compile při vytváření XPathExpression objektu.
SetContext přijímá XsltContext jako překladač oboru názvů, takže můžete implementovat vlastní kontext a používat funkce a proměnné založené na IXsltContextFunction a IXsltContextVariable. Výraz XPath je spustí. Další informace naleznete v tématu Uživatelem definované funkce a proměnné.
Viz také
- XmlNamespaceManager
- SetContext(IXmlNamespaceResolver)
- IXmlNamespaceResolver
- Compile(String, IXmlNamespaceResolver)
- Uživatelem definované funkce a proměnné