Udostępnij za pośrednictwem


XmlUrlResolver Klasa

Definicja

Rozpoznaje zewnętrzne zasoby XML nazwane przez identyfikator URI (Uniform Resource Identifier).

public ref class XmlUrlResolver : System::Xml::XmlResolver
public class XmlUrlResolver : System.Xml.XmlResolver
type XmlUrlResolver = class
    inherit XmlResolver
Public Class XmlUrlResolver
Inherits XmlResolver
Dziedziczenie
XmlUrlResolver

Przykłady

Poniższy przykład tworzy obiekt XmlReader , który używa elementu XmlUrlResolver z poświadczeniami domyślnymi.


// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials;

// Create the reader.
XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = resolver;
XmlReader reader =
     XmlReader.Create("http://serverName/data/books.xml", settings);
' Create an XmlUrlResolver with default credentials.
Dim resolver As New XmlUrlResolver()
resolver.Credentials = CredentialCache.DefaultCredentials

' Create the reader.
Dim settings As New XmlReaderSettings()
settings.XmlResolver = resolver
Dim reader As XmlReader = _
   XmlReader.Create("http://serverName/data/books.xml", settings)

Uwagi

XmlUrlResolver służy do rozpoznawania zewnętrznych zasobów XML, takich jak jednostki, definicje typów dokumentów (DTD) lub schematy. Służy również do przetwarzania elementów dołączania i importowania elementów znajdujących się w arkuszach stylów extensible StyleSheet Language (XSL) lub schematach języka definicji schematu XML (XSD).

XmlUrlResolver to domyślny resolver dla wszystkich klas w przestrzeni nazw System.Xml. Obsługuje protokoły file:// i http:// oraz żądania z klasy WebRequest.

Ważny

XmlUrlResolver obiekty mogą zawierać poufne informacje, takie jak poświadczenia użytkownika. Podczas buforowania XmlUrlResolver obiektów należy zachować ostrożność i nie należy przekazywać XmlUrlResolver obiektów do niezaufanego składnika.

Rozpoznawanie identyfikatorów DTD

Jeśli czytnik XML (XmlReader) odczytuje plik XML zawierający zewnętrzny identyfikator DTD, wywołuje XmlUrlResolver.GetEntityAsync metodę w celu uzyskania reprezentacji strumienia dtD. Jeśli identyfikator URI dtD jest względnym identyfikatorem URI, czytnik XML wywołuje XmlUrlResolver.ResolveUri metodę i zwraca bezwzględny identyfikator URI dla danego relativeUri parametru i baseURi . Jeśli element XmlUrlResolver nie wie, jak rozpoznać identyfikator URI, zwraca wartość null.

Metoda XmlUrlResolver.GetEntity używa informacji we Credentials właściwości zgodnie z potrzebami, aby uzyskać dostęp do zasobu. Nie ma get dostępu do tej właściwości ze względów bezpieczeństwa. Podczas zastępowania XmlResolvermetoda GetEntity jest metodą, która korzysta z informacji o poświadczeniach we właściwości Credentials .

Rozpoznawanie wszystkich innych zasobów XML jest bardzo podobne do rozpoznawania dtD. XmlResolver negocjuje połączenie z zasobem zewnętrznym i zwraca reprezentację Stream zawartości. Obiekt, który wykonuje wywołanie w celu XmlResolver zinterpretowania strumienia.

Rozszerzanie klasy XmlUrlResolver

Domyślnym zachowaniem XmlUrlResolver klasy jest rozwiązanie zasobu danych XML ze źródła, a nie z pamięci podręcznej. W niektórych przypadkach rozpoznawanie zasobu danych z pamięci podręcznej może zwiększyć wydajność aplikacji, zapisując podróż na serwer zasobu danych. Tutaj należy rozważyć wzrost wydajności w stosunku do potrzeby up-to-date zawartości.

Poniższy przykład rozszerza XmlUrlResolver i tworzy nową klasę , XmlCachingResolveraby pobrać zasoby z pamięci podręcznej. Odbywa się to przez zastąpienie XmlUrlResolver.Credentials właściwości i XmlUrlResolver.GetEntity metody .

class XmlCachingResolver : XmlUrlResolver
{
    bool enableHttpCaching;
    ICredentials credentials;

    //resolve resources from cache (if possible) when enableHttpCaching is set to true
    //resolve resources from source when enableHttpcaching is set to false
    public XmlCachingResolver(bool enableHttpCaching)
    {
        this.enableHttpCaching = enableHttpCaching;
    }

    public override ICredentials Credentials
    {
        set
        {
            credentials = value;
            base.Credentials = value;
        }
    }

    public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
    {
        if (absoluteUri == null)
        {
            throw new ArgumentNullException("absoluteUri");
        }
        //resolve resources from cache (if possible)
        if (absoluteUri.Scheme == "http" && enableHttpCaching && (ofObjectToReturn == null || ofObjectToReturn == typeof(Stream)))
        {
            WebRequest webReq = WebRequest.Create(absoluteUri);
            webReq.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
            if (credentials != null)
            {
                webReq.Credentials = credentials;
            }
            WebResponse resp = webReq.GetResponse();
            return resp.GetResponseStream();
        }
        //otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
        else
        {
            return base.GetEntity(absoluteUri, role, ofObjectToReturn);
        }
    }
}
Class XmlCachingResolver
    Inherits XmlUrlResolver
    Dim enableHttpCaching As Boolean
    Public Shadows Credentials As ICredentials

    'resolve resources from cache (if possible) when enableHttpCaching is set to true
    'resolve resources from source when enableHttpcaching is set to false
    Public Sub New(ByVal enableHttpCaching As Boolean)
        Me.enableHttpCaching = enableHttpCaching
    End Sub

    Public Shadows Function GetEntity(ByVal absoluteUri As Uri, ByVal role As String, ByVal returnType As Type) As Object
        If absoluteUri = Nothing Then
            Throw New ArgumentNullException("absoluteUri")
        End If

        'resolve resources from cache (if possible)
        If absoluteUri.Scheme = "http" And enableHttpCaching And (returnType Is GetType(Nullable) Or returnType Is GetType(Stream)) Then
            Dim webReq As WebRequest = WebRequest.Create(absoluteUri)
            webReq.CachePolicy = New HttpRequestCachePolicy(HttpRequestCacheLevel.Default)
            If Not (Credentials Is Nothing) Then
                webReq.Credentials = Credentials
            End If
            Dim resp As WebResponse = webReq.GetResponse()
            Return resp.GetResponseStream()
            'otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
        Else
            Return MyBase.GetEntity(absoluteUri, role, returnType)
        End If

    End Function
End Class

Zachowanie buforowania XmlCachingResolver klasy jest implementowane w metodzie GetEntity . Odbywa się to przez utworzenie nowych WebRequest obiektów i HttpRequestCachePolicy . Obiekt HttpRequestCachePolicy jest tworzony przy użyciu Default elementu członkowskiego HttpRequestCacheLevel wyliczenia.

Właściwość CachePolicyWebRequest obiektu jest ustawiana za pomocą HttpRequestCachePolicy obiektu .

XmlCachingResolver Wystąpienie klasy jest tworzone za pomocą klasy BooleanenableHttpCaching. Jeśli ta wartość jest ustawiona na true, wystąpienie rozpozna zasób z domyślnej pamięci podręcznej, jeśli to możliwe. Gdy enableHttpCaching jest ustawiona wartość false, wystąpienie używa domyślnego zachowania i rozpoznaje zasoby ze źródła.

Nuta

Ten przykład wykorzystuje rozszerzalność klas XML w programie .NET Framework. Inne klasy można rozszerzyć i dostosować do potrzeb określonej aplikacji.

Konstruktory

Nazwa Opis
XmlUrlResolver()

Inicjuje nowe wystąpienie klasy XmlUrlResolver.

Właściwości

Nazwa Opis
CachePolicy

Pobiera lub ustawia zasady pamięci podręcznej dla obiektu bazowego WebRequest .

Credentials

Ustawia poświadczenia używane do uwierzytelniania żądań internetowych.

Proxy

Pobiera lub ustawia serwer proxy sieci dla obiektu bazowego WebRequest .

Metody

Nazwa Opis
Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.

(Odziedziczone po Object)
GetEntity(Uri, String, Type)

Mapuje identyfikator URI na obiekt zawierający rzeczywisty zasób.

GetEntityAsync(Uri, String, Type)

Asynchronicznie mapuje identyfikator URI na obiekt zawierający rzeczywisty zasób.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Pobiera Type bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Object.

(Odziedziczone po Object)
ResolveUri(Uri, String)

Usuwa bezwzględny identyfikator URI z identyfikatorów URI podstawowych i względnych.

ResolveUri(Uri, String)

Po zastąpieniu w klasie pochodnej rozpoznawanie bezwzględnego identyfikatora URI z podstawowych i względnych identyfikatorów URI.

(Odziedziczone po XmlResolver)
SupportsType(Uri, Type)

Umożliwia programowi rozpoznawania nazw zwracanie typów innych niż Stream.

(Odziedziczone po XmlResolver)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Zobacz też