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 utilizzata per risolvere le 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 utilizzato 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 gli overload che accettano un oggetto XmlResolver come uno dei suoi argomenti. Se non viene specificato alcun tipo XmlResolver, viene utilizzato 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 utilizzare un tipo XmlResolver con le credenziali necessarie.
Se si desidera limitare le risorse a cui può accedere il processo XSLT, è possibile utilizzare un XmlSecureResolver con il set di autorizzazioni corretto. Utilizzare 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 utilizzarla per risolvere le risorse.
Se si desidera impedire l'accesso alle risorse esterne, è 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.
Dim myCred As NetworkCredential = New NetworkCredential(UserName,SecurelyStoredPassword,Domain)
Dim myCache As CredentialCache = New CredentialCache()
myCache.Add(new Uri("https://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("https://serverName/data/xsl/order.xsl", XsltSettings.Default, resolver)
// Create the credentials.
NetworkCredential myCred = new NetworkCredential(UserName,SecurelyStoredPassword,Domain);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("https://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("https://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);
Vedere anche
Riferimenti
Concetti
Considerazione sulla sicurezza di System.Xml