XmlResolver Třída

Definice

Řeší externí prostředky XML pojmenované identifikátorem URI (Uniform Resource Identifier).

public ref class XmlResolver abstract
public abstract class XmlResolver
type XmlResolver = class
Public MustInherit Class XmlResolver
Dědičnost
XmlResolver
Odvozené

Příklady

Následující příklad vytvoří výchozí XmlUrlResolver přihlašovací údaje. A XmlReader slouží ke čtení a zobrazení výsledného datového proudu.

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

Poznámky

Tento XmlResolver typ se používá k řešení 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).

XmlResolver zpracovává všechny aspekty vyjednávání připojení k prostředkům, včetně zpracování bezpečnostních údajů, otevření připojení ke zdroji dat a vrácení prostředku jako datového proudu nebo jiného typu objektu. Objekt, který volá XmlResolver , má úlohu interpretace datového proudu.

Obor System.Xml názvů zahrnuje následující konkrétní implementaci XmlResolver třídy:

Můžete vytvořit a zadat vlastní resolver. Pokud nezadáte resolver, systém použije výchozí XmlUrlResolver bez přihlašovacích údajů uživatele.

Určíte, který XmlResolver se má použít, nastavením vlastnosti XmlReaderSettings.XmlResolver a předáním objektu XmlReaderSettings metodě Create.

Pokud je prostředek uložený v systému, který vyžaduje ověření, použijete XmlResolver.Credentials vlastnost k zadání potřebných přihlašovacích údajů.

Zadání přihlašovacích údajů pro ověřování

Soubor, který obsahuje data XML ke čtení, může mít zásady omezeného přístupu. Pokud se pro přístup k síťovému prostředku vyžaduje ověřování, použijte Credentials vlastnost k zadání potřebných přihlašovacích údajů. Credentials Pokud vlastnost není nastavena, přihlašovací údaje jsou nastaveny na null.

Předpokládejme například, že přihlašovací údaje jsou potřeba při vyžádání dat z webu pro účely ověřování. Pokud webový virtuální adresář neumožňuje anonymní přístup, musíte nastavit Credentials vlastnost pro zadání přihlašovacích údajů. Následující příklad vytvoří XmlReader objekt, který pro přístup XmlUrlResolver k webu používá http://localhost/bookstore/inventory.xml výchozí přihlašovací údaje.

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

Můžete zadat různé přihlašovací údaje pro různé identifikátory URI a přidat je do mezipaměti. Tyto přihlašovací údaje slouží ke kontrole ověřování různých identifikátorů URI bez ohledu na původní zdroj XML. Následující příklad ukazuje, jak přidat přihlašovací údaje do mezipaměti.

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

Bezpečnostní aspekty

Při práci s XmlResolver třídou zvažte následující položky.

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

  • Pokud navrhujete vlastnost třídy, která tuto třídu používá XmlResolver , měla by být vlastnost definována jako vlastnost jen pro zápis. Vlastnost lze použít k určení XmlResolver , která se má použít, ale nelze ji použít k vrácení objektu XmlResolver .

  • Pokud vaše aplikace přijímá XmlResolver objekty z nedůvěryhodného kódu, nemůžete předpokládat, že identifikátor URI předaný do GetEntity metody bude stejný jako vrácené metodou ResolveUri . Třídy odvozené z XmlResolver třídy mohou přepsat metodu GetEntity a vrátit data, která se liší od toho, co bylo obsaženo v původním identifikátoru URI.

  • Aplikace může zmírnit hrozby odepření služby způsobené pamětí pro metodu GetEntity implementováním IStream , která omezuje počet přečtených bajtů. To pomáhá chránit před situacemi, kdy se škodlivý kód pokusí předat do metody nekonečný proud bajtů GetEntity .

Konstruktory

Name Description
XmlResolver()

Inicializuje novou instanci XmlResolver třídy.

Vlastnosti

Name Description
Credentials

Při přepsání v odvozené třídě nastaví přihlašovací údaje použité k ověřování webových požadavků.

FileSystemResolver

Získá překladač XML, který řeší pouze identifikátory URI systému souborů.

ThrowingResolver

Získá překladač XML, který zakazuje překlad entit.

Metody

Name Description
Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

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

Při přepsání v odvozené třídě 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.

GetHashCode()

Slouží jako výchozí funkce hash.

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

Získá Type aktuální instance.

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

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
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.

SupportsType(Uri, Type)

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

ToString()

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

(Zděděno od Object)

Platí pro

Viz také