XmlResolver Klasse
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.
Löst externe XML-Ressourcen auf, die durch einen Uniform Resource Identifier (URI) benannt werden.
public ref class XmlResolver abstract
public abstract class XmlResolver
type XmlResolver = class
Public MustInherit Class XmlResolver
- Vererbung
-
XmlResolver
- Abgeleitet
Beispiele
Im folgenden Beispiel wird ein XmlUrlResolver Standardanmeldeinformationen erstellt. A XmlReader wird verwendet, um den resultierenden Datenstrom zu lesen und anzuzeigen.
using System;
using System.Xml;
using System.IO;
class Example
{
static void Main()
{
// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Point the resolver at the desired resource and resolve as a stream.
Uri baseUri = new Uri("http://serverName/");
Uri fulluri = resolver.ResolveUri(baseUri, "fileName.xml");
Stream s = (Stream)resolver.GetEntity(fulluri, null, typeof(Stream));
// Create the reader with the resolved stream and display the data.
XmlReader reader = XmlReader.Create(s);
while (reader.Read())
{
Console.WriteLine(reader.ReadOuterXml());
}
}
}
Imports System.Xml
Imports System.IO
Module Module1
Sub Main()
' Create an XmlUrlResolver with default credentials.
Dim resolver As New XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Point the resolver at the desired resource and resolve as a stream.
Dim baseUri As New Uri("http://serverName/")
Dim fulluri As Uri = resolver.ResolveUri(baseUri, "fileName.xml")
Dim s As Stream = CType(resolver.GetEntity(fulluri, Nothing, GetType(Stream)), Stream)
' Create the reader with the resolved stream and display the data.
Dim reader As XmlReader = XmlReader.Create(s)
While reader.Read()
Console.WriteLine(reader.ReadOuterXml())
End While
End Sub
End Module
Hinweise
Der XmlResolver Typ wird verwendet, um externe XML-Ressourcen wie Entitäten, Dokumenttypdefinitionen (DTDs) oder Schemas aufzulösen. Er wird auch verwendet, um Elemente einzuschließen und zu importieren, die in XSL-Stylesheets (Extensible Stylesheet Language) oder Schemas für die XML-Schemadefinitionssprache (XSD) gefunden wurden.
XmlResolver behandelt alle Aspekte der Aushandlung der Verbindung mit den Ressourcen, einschließlich der Verarbeitung von Sicherheitsanmeldeinformationen, dem Öffnen der Verbindung mit der Datenquelle und dem Zurückgeben der Ressource in Form eines Datenstroms oder eines anderen Objekttyps. Das Objekt, das aufruft XmlResolver , hat die Aufgabe, den Datenstrom zu interpretieren.
Der System.Xml Namespace enthält die folgende konkrete Implementierung der XmlResolver Klasse:
-
XmlUrlResolver ist der Standardlöser für alle Klassen im System.Xml Namespace. Sie unterstützt die
file://Protokolle undhttp://Anforderungen der System.Net.WebRequest Klasse. Beispiele zum Erweitern der Klasse zur Verbesserung der Leistung finden Sie auf der XmlUrlResolver Referenzseite.
Sie können einen eigenen Resolver erstellen und angeben. Wenn Sie keinen Resolver angeben, verwendet der Leser eine Standardeinstellung XmlUrlResolver ohne Benutzeranmeldeinformationen.
Sie geben die XmlResolver zu verwendende Eigenschaft an, indem Sie die XmlReaderSettings.XmlResolver Eigenschaft festlegen und das XmlReaderSettings Objekt an die Create Methode übergeben.
Wenn die Ressource auf einem System gespeichert wird, das eine Authentifizierung erfordert, verwenden Sie die XmlResolver.Credentials Eigenschaft, um die erforderlichen Anmeldeinformationen anzugeben.
Bereitstellung von Authentifizierungsdaten
Die Datei, die die zu lesenden XML-Daten enthält, verfügt möglicherweise über eine Richtlinie für eingeschränkten Zugriff. Wenn die Authentifizierung erforderlich ist, um auf eine Netzwerkressource zuzugreifen, verwenden Sie die Credentials Eigenschaft, um die erforderlichen Anmeldeinformationen anzugeben. Wenn die Credentials-Eigenschaft nicht festgelegt ist, werden die Anmeldeinformationen auf null festgelegt.
Gehen Sie beispielsweise davon aus, dass Anmeldeinformationen beim Anfordern von Daten aus dem Web für Authentifizierungszwecke erforderlich sind. Soweit das virtuelle Webverzeichnis keinen anonymen Zugriff zulässt, müssen Sie die Credentials Eigenschaft so festlegen, dass Anmeldeinformationen angegeben werden. Im folgenden Beispiel wird ein XmlReader Objekt erstellt, das ein XmlUrlResolver Objekt mit Standardanmeldeinformationen für den Zugriff auf die http://localhost/bookstore/inventory.xml Website verwendet.
// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", settings)
Sie können unterschiedliche Anmeldeinformationen für unterschiedliche URIs angeben und zu einem Cache hinzufügen. Diese Anmeldeinformationen werden verwendet, um die Authentifizierung für die verschiedenen URIs zu überprüfen, unabhängig von der ursprünglichen Quelle des XML. Das folgende Beispiel zeigt, wie Sie einem Cache Anmeldeinformationen hinzufügen.
// Create the credentials.
NetworkCredential myCred = new NetworkCredential(UserName,SecurelyStoredPassword,Domain);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred);
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred);
// Set the credentials on the XmlUrlResolver object.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = myCache;
// Compile the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("http://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);
' Create the credentials.
Dim myCred As NetworkCredential = New NetworkCredential(UserName,SecurelyStoredPassword,Domain)
Dim myCache As CredentialCache = New CredentialCache()
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred)
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred)
' Set the credentials on the XmlUrlResolver object.
Dim resolver As XmlUrlResolver = New XmlUrlResolver()
resolver.Credentials = myCache
' Compile the style sheet.
Dim xslt As XslCompiledTransform = New XslCompiledTransform()
xslt.Load("http://serverName/data/xsl/order.xsl", XsltSettings.Default, resolver)
Sicherheitsüberlegungen
Berücksichtigen Sie beim Arbeiten mit der XmlResolver Klasse die folgenden Elemente.
XmlResolver Objekte können vertrauliche Informationen wie Benutzeranmeldeinformationen enthalten. Sie sollten beim Zwischenspeichern von XmlResolver Objekten vorsichtig sein und das XmlResolver Objekt nicht an eine nicht vertrauenswürdige Komponente übergeben.
Wenn Sie eine Klasseneigenschaft entwerfen, die die XmlResolver Klasse verwendet, sollte die Eigenschaft als schreibgeschützte Eigenschaft definiert werden. Die Eigenschaft kann verwendet werden, um die XmlResolver zu verwendende Eigenschaft anzugeben, kann jedoch nicht verwendet werden, um ein XmlResolver Objekt zurückzugeben.
Wenn Ihre Anwendung Objekte aus nicht vertrauenswürdigen Code akzeptiert XmlResolver , können Sie nicht davon ausgehen, dass der an die GetEntity Methode übergebene URI mit dem von der ResolveUri Methode zurückgegebenen identisch ist. Von der XmlResolver Klasse abgeleitete Klassen können die GetEntity Methode überschreiben und Daten zurückgeben, die sich von dem im ursprünglichen URI enthaltenen Inhalt unterscheiden.
Ihre Anwendung kann Speicherverweigerungsbedrohungen für die GetEntity-Methode abschwächen, indem sie eine IStream-Implementierung verwendet, die die Anzahl der gelesenen Bytes begrenzt. Dadurch können Sie vor Situationen schützen, in denen bösartiger Code versucht, einen unendlichen Bytestrom an die GetEntity Methode zu übergeben.
Konstruktoren
| Name | Beschreibung |
|---|---|
| XmlResolver() |
Initialisiert eine neue Instanz der XmlResolver-Klasse. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Credentials |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, werden die Anmeldeinformationen festgelegt, die zum Authentifizieren von Webanforderungen verwendet werden. |
| FileSystemResolver |
Ruft einen XML-Resolver ab, der nur Dateisystem-URIs aufgelöst. |
| ThrowingResolver |
Ruft einen XML-Resolver ab, der die Entitätsauflösung verbietet. |
Methoden
| Name | Beschreibung |
|---|---|
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetEntity(Uri, String, Type) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein URI einem Objekt zugeordnet, das die tatsächliche Ressource enthält. |
| GetEntityAsync(Uri, String, Type) |
Ordnet asynchron einen URI einem Objekt zu, das die tatsächliche Ressource enthält. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ResolveUri(Uri, String) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird der absolute URI aus der Basis und relativen URIs aufgelöst. |
| SupportsType(Uri, Type) |
Ermöglicht dem Resolver, andere Typen als Stream. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |