XmlUrlResolver Třída

Definice

Řeší externí prostředky XML pojmenované identifikátorem 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
Dědičnost
XmlUrlResolver

Příklady

Následující příklad vytvoří XmlReader , který používá XmlUrlResolver výchozí přihlašovací údaje.


// 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)

Poznámky

XmlUrlResolver slouží k překladu externích prostředků XML, jako jsou entity, definice typů dokumentů (DTD) nebo schémata. Používá se také ke zpracování zahrnutí a importu prvků nalezených v šablonách stylů XSL (Extensible StyleSheet Language) nebo schématech XSD (XML Schema Definition Language).

XmlUrlResolver je výchozí překladač pro všechny třídy v System.Xml oboru názvů. Podporuje file:// a protokoly a http:// požadavky z WebRequest třídy.

Důležité

XmlUrlResolver objekty mohou obsahovat citlivé informace, jako jsou přihlašovací údaje uživatele. Při ukládání objektů do mezipaměti XmlUrlResolver byste měli být opatrní a neměli byste předat XmlUrlResolver objekty nedůvěryhodné komponentě.

Překlad disků DTD

Pokud čtečka XML (XmlReader) čte soubor XML, který obsahuje externí DTD, volá XmlUrlResolver.GetEntityAsync metodu pro získání reprezentace datového proudu DTD. Pokud je identifikátor URI DTD relativní identifikátor URI, čtečka XML volá XmlUrlResolver.ResolveUri metodu a vrátí absolutní identifikátor URI pro dané relativeUri parametry a baseURi parametry. XmlUrlResolver Pokud nevíte, jak vyřešit identifikátor URI, vrátí null.

Metoda XmlUrlResolver.GetEntity používá informace ve Credentials vlastnosti podle potřeby k získání přístupu k prostředku. Z bezpečnostních důvodů neexistuje žádný get přístup k této vlastnosti. Při přepsání XmlResolverje GetEntity metoda, která využívá informace o přihlašovacích údajích ve vlastnosti Credentials.

Překlad všech ostatních prostředků XML je velmi podobný překladu DTD. XmlResolver vyjedná spojení s externím prostředkem a vrátí Stream reprezentaci obsahu. Objekt, který volání XmlResolver interpretuje datový proud.

Rozšíření Třídy XmlUrlResolver

Výchozím chováním XmlUrlResolver třídy je překlad datového prostředku XML ze zdroje, nikoli z mezipaměti. V některých případech může řešení datového prostředku z mezipaměti zlepšit výkon aplikace uložením cesty na server datového prostředku. Zvýšení výkonu je třeba zvážit oproti potřebě aktuálního obsahu.

Následující příklad rozšiřuje a sestavuje XmlUrlResolver novou třídu a XmlCachingResolvernačte prostředky z mezipaměti. To se provádí přepsáním XmlUrlResolver.Credentials vlastnosti a 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

Chování XmlCachingResolver při ukládání do mezipaměti třídy je implementováno v GetEntity metodě. To se provádí vytvořením nových WebRequest objektů a HttpRequestCachePolicy objektů. Objekt HttpRequestCachePolicy se vytvoří pomocí Default člena výčtu HttpRequestCacheLevel .

Vlastnost CachePolicy objektu WebRequest je nastavena s objektem HttpRequestCachePolicy .

Instance XmlCachingResolver třídy je vytvořena pomocí Boolean enableHttpCaching. Pokud je tato hodnota nastavená na true, instance přeloží prostředek z výchozí mezipaměti, pokud je to možné. Pokud enableHttpCaching je nastavená hodnota false, instance používá výchozí chování a řeší prostředky ze zdroje.

Poznámka

Tento příklad využívá rozšiřitelnost tříd XML v .NET Framework. Další třídy lze rozšířit a přizpůsobit tak, aby vyhovovaly potřebám konkrétní aplikace.

Konstruktory

XmlUrlResolver()

Inicializuje novou instanci XmlUrlResolver třídy.

Vlastnosti

CachePolicy

Získá nebo nastaví zásadu mezipaměti pro podkladový WebRequest objekt.

Credentials

Nastaví přihlašovací údaje používané k ověřování webových požadavků.

Proxy

Získá nebo nastaví síťový proxy pro podkladový WebRequest objekt.

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetEntity(Uri, String, Type)

Mapy identifikátor URI k objektu, který obsahuje skutečný prostředek.

GetEntityAsync(Uri, String, Type)

Asynchronně mapuje identifikátor URI na objekt, který obsahuje skutečný prostředek.

GetEntityAsync(Uri, String, Type)

Asynchronně mapuje identifikátor URI na objekt, který obsahuje skutečný prostředek.

(Zděděno od XmlResolver)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Type Získá aktuální instanci.

(Zděděno od Object)
MemberwiseClone()

Vytvoří použádnou kopii aktuálního souboru Object.

(Zděděno od Object)
ResolveUri(Uri, String)

Vyřeší absolutní identifikátor URI ze základního a relativního identifikátoru URI.

ResolveUri(Uri, String)

Při přepsání v odvozené třídě přeloží absolutní identifikátor URI ze základního a relativního identifikátoru URI.

(Zděděno od XmlResolver)
SupportsType(Uri, Type)

Umožňuje překladače vrátit jiné typy než Stream.

(Zděděno od XmlResolver)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také