Risoluzione delle risorse esterne durante l'elaborazione XSLT

Durante una trasformazione XSLT si presentano vari casi in cui può essere necessario risolvere le risorse esterne.

Utilizzo della classe XmlResolver

La classe XmlResolver viene usata per risolvere risorse esterne. Nella tabella seguente vengono descritti i casi in cui il tipo XmlResolver viene interessato dall'elaborazione XSLT.

Attività XSLT Scopo per il quale viene usato XmlResolver
Compilare il foglio di stile. Risolvere l'URI del foglio di stile.

-e-

Risolvere i riferimenti URI negli elementi xsl:import o xsl:include.
Eseguire il foglio di stile. Risolvere l'URI del documento di contesto.

-e-

Risolvere i riferimenti URI in qualsiasi funzione document() XSLT.

I metodi Load e Transform includono overload che accettano un oggetto XmlResolver come argomento. Se non viene specificato alcun tipo XmlResolver, viene usato un tipo predefinito XmlUrlResolver senza credenziali.

Nell'elenco seguente viene descritto quando può essere necessario specificare un oggetto XmlResolver:

  • Se il processo XSLT richiede l'accesso a una risorsa di rete che richiede l'autenticazione, è possibile usare un tipo XmlResolver con le credenziali necessarie.

  • Se si desidera limitare le risorse a cui può accedere il processo XSLT, è possibile usare un XmlSecureResolver con il set di autorizzazioni corretto. Usare la classe XmlSecureResolver se è necessario aprire una risorsa che non si controlla o che non è considerata affidabile.

  • Se si desidera personalizzare il comportamento, è possibile implementare la propria classe XmlResolver e usarla per risolvere le risorse.

  • Se si desidera assicurarsi che non venga eseguito l'accesso ad alcuna risorsa esterna, è possibile specificare null per l'argomento XmlResolver.

Esempio

Nell'esempio seguente viene compilato un foglio di stile archiviato su una risorsa di rete. Un oggetto XmlUrlResolver specificherà le credenziali necessarie per accedere al foglio di stile.

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

Vedi anche