XmlResolver Klas

Definitie

Hiermee worden externe XML-resources met de naam omgezet door een URI (Uniform Resource Identifier).

public ref class XmlResolver abstract
public abstract class XmlResolver
type XmlResolver = class
Public MustInherit Class XmlResolver
Overname
XmlResolver
Afgeleid

Voorbeelden

In het volgende voorbeeld wordt een XmlUrlResolver met standaardreferenties gemaakt. Een XmlReader wordt gebruikt om de resulterende gegevensstroom te lezen en weer te geven.

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

Opmerkingen

Het XmlResolver type wordt gebruikt voor het oplossen van externe XML-resources, zoals entiteiten, documenttypedefinities (DTD's) of schema's. Het wordt ook gebruikt voor het verwerken en importeren van elementen in XSL-opmaakmodellen (Extensible Stylesheet Language) of XSD-schema's (XML Schema Definition Language).

XmlResolver verwerkt alle aspecten van het onderhandelen over de verbinding met de resources, inclusief het afhandelen van beveiligingsreferenties, het openen van de verbinding met de gegevensbron en het retourneren van de resource in de vorm van een stroom of ander objecttype. Het object dat aanroept XmlResolver , heeft de taak om de stream te interpreteren.

De System.Xml naamruimte bevat de volgende concrete implementatie van de XmlResolver klasse:

  • XmlUrlResolver is de standaardresolver voor alle klassen in de System.Xml naamruimte. Het ondersteunt de file:// en http:// protocollen en aanvragen van de System.Net.WebRequest klasse. Zie de referentiepagina voor voorbeelden van het uitbreiden van de klasse om de XmlUrlResolver prestaties te verbeteren.

U kunt uw eigen resolver maken en opgeven. Als u geen resolver opgeeft, gebruikt de lezer een standaardinstelling XmlUrlResolver zonder gebruikersreferenties.

U specificeert welk XmlResolver gebruikt moet worden door de XmlReaderSettings.XmlResolver eigenschap in te stellen en het XmlReaderSettings object door te geven aan de Create methode.

Als de resource is opgeslagen op een systeem waarvoor verificatie is vereist, gebruikt u de XmlResolver.Credentials eigenschap om de benodigde referenties op te geven.

Verificatiereferenties opgeven

Het bestand met de XML-gegevens dat moet worden gelezen, heeft mogelijk een beperkt toegangsbeleid. Als verificatie is vereist voor toegang tot een netwerkresource, gebruikt u de Credentials eigenschap om de benodigde referenties op te geven. Als de Credentials eigenschap niet is ingesteld, worden referenties ingesteld op null.

Stel dat referenties nodig zijn bij het aanvragen van gegevens van het web voor verificatiedoeleinden. Tenzij de virtuele webmap anonieme toegang toestaat, moet u de Credentials eigenschap instellen om referenties op te geven. In het volgende voorbeeld wordt een XmlReader object gemaakt dat gebruikmaakt van een XmlUrlResolver met standaardreferenties voor toegang tot de http://localhost/bookstore/inventory.xml site.

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

U kunt verschillende referenties opgeven voor verschillende URI's en deze toevoegen aan een cache. Deze referenties worden gebruikt om verificatie voor de verschillende URI's te controleren, ongeacht de oorspronkelijke bron van de XML. In het volgende voorbeeld ziet u hoe u referenties toevoegt aan een cache.

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

Beveiligingsoverwegingen

Houd rekening met de volgende items wanneer u met de XmlResolver klasse werkt.

  • XmlResolver objecten kunnen gevoelige informatie bevatten, zoals gebruikersreferenties. Wees voorzichtig bij het opslaan van objecten in de cache XmlResolver en mag het XmlResolver object niet doorgeven aan een niet-vertrouwd onderdeel.

  • Als u een klasse-eigenschap ontwerpt die gebruikmaakt van de XmlResolver klasse, moet de eigenschap worden gedefinieerd als een alleen-schrijven-eigenschap. De eigenschap kan worden gebruikt om de XmlResolver te gebruiken eigenschap op te geven, maar kan niet worden gebruikt om een XmlResolver object te retourneren.

  • Als uw toepassing objecten van niet-vertrouwde code accepteert XmlResolver , kunt u niet aannemen dat de URI die in de GetEntity methode is doorgegeven, hetzelfde is als die die wordt geretourneerd door de ResolveUri methode. Klassen die zijn afgeleid van de XmlResolver klasse, kunnen de GetEntity methode overschrijven en gegevens retourneren die afwijken van wat in de oorspronkelijke URI is opgenomen.

  • Uw toepassing kan de denial of service-bedreigingen van het geheugen beperken tot de GetEntity methode door een IStream te implementeren die het aantal gelezen bytes beperkt. Dit helpt u te beschermen tegen situaties waarin schadelijke code probeert een oneindige stroom van bytes door te geven aan de GetEntity methode.

Constructors

Name Description
XmlResolver()

Initialiseert een nieuw exemplaar van de XmlResolver klasse.

Eigenschappen

Name Description
Credentials

Wanneer deze worden overschreven in een afgeleide klasse, stelt u de referenties in die worden gebruikt voor het verifiëren van webaanvragen.

FileSystemResolver

Hiermee haalt u een XML-resolver op waarmee alleen bestandssysteem-URI's worden omgezet.

ThrowingResolver

Hiermee wordt een XML-resolver opgehaald die de omzetting van entiteiten verbiedt.

Methoden

Name Description
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetEntity(Uri, String, Type)

Wanneer deze wordt overschreven in een afgeleide klasse, wijst u een URI toe aan een object dat de werkelijke resource bevat.

GetEntityAsync(Uri, String, Type)

Asynchroon wijst een URI toe aan een object dat de werkelijke resource bevat.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
ResolveUri(Uri, String)

Als deze wordt overschreven in een afgeleide klasse, wordt de absolute URI van de basis- en relatieve URI's omgezet.

SupportsType(Uri, Type)

Hiermee kan de resolver andere typen retourneren dan Stream.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Van toepassing op

Zie ook