Condividi tramite


Risoluzione delle risorse esterne durante l'elaborazione XSLT

Esistono diverse volte durante una trasformazione XSLT quando potrebbe essere necessario risolvere le risorse esterne.

Utilizzo della classe XmlResolver

La XmlResolver classe viene usata per risolvere le risorse esterne. Nella tabella seguente viene descritto quando il XmlResolver viene coinvolto durante l'elaborazione XSLT.

Attività XSLT Utilizzo di XmlResolver
Compilare il foglio di stile. Risolvere l'URI del foglio di stile.

-e-

Risolvere i riferimenti URI in qualunque elemento 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 XSLT document() .

I metodi Load e Transform includono sovraccarichi che accettano un oggetto XmlResolver come uno dei loro argomenti. Se non viene specificato un oggetto XmlResolver , viene utilizzato un valore predefinito XmlUrlResolver senza credenziali.

L'elenco seguente descrive quando si desidera specificare un XmlResolver oggetto:

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

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

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

  • Se si vuole assicurarsi che non siano accessibili risorse esterne, è possibile specificare null per l'argomento XmlResolver .

Esempio

Nell'esempio seguente viene compilato un foglio di stile archiviato in una risorsa di rete. Un XmlUrlResolver oggetto specifica 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)

Vedere anche