Compartir a través de


Resolución de recursos externos durante el procesamiento XSLT

Actualización: November 2007

Hay varios momentos a lo largo de una transformación XSLT en los cuales puede que necesite resolver recursos externos.

Uso de la clase XmlResolver

La clase XmlResolver se utiliza para resolver recursos externos. En la siguiente tabla se describe cuándo XmlResolver se implica en el procesamiento XSLT.

Tarea de XSLT

XmlResolver se utiliza para

Compilar la hoja de estilos.

Resolver el identificador URI de la hoja de estilos.

-y-

Resolver referencias URI en cualquier elemento xsl:import o xsl:include.

Ejecutar la hoja de estilos.

Resolver el identificador URI del documento de contexto.

-y-

Resolver referencias URI en cualquier función document() de XSLT.

Los métodos Load y Transform incluyen sobrecargas que toman un objeto XmlResolver como uno de sus argumentos. Si no se especifica un código XmlResolver, se utiliza una referencia XmlUrlResolver predeterminada sin ninguna credencial.

En la siguiente lista se describe cuándo es conveniente especificar un objeto XmlResolver:

  • Si el proceso XSLT necesita tener acceso a un recurso de red que requiere autenticación, puede utilizar un XmlResolver con las credenciales necesarias.

  • Si desea restringir los recursos a los que tiene acceso el proceso XSLT, puede utilizar un XmlSecureResolver con el conjunto de permisos correcto. Utilice la clase XmlSecureResolver si necesita abrir un recurso que no controla o que no es de confianza.

  • Si desea personalizar el comportamiento, puede implementar su propia clase XmlResolver y utilizarla para resolver recursos.

  • Si desea asegurarse de que no se tiene acceso a ningún recurso externo, puede especificar null para el argumento XmlResolver.

Ejemplo

En el siguiente ejemplo se compila una hoja de estilos que está almacenada en un recurso de red. Un objeto XmlUrlResolver especifica las credenciales necesarias para tener acceso a la hoja de estilos.

' 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);   

Vea también

Conceptos

Consideraciones de seguridad de System.Xml

Referencia

XslCompiledTransform

XsltSettings

Otros recursos

Transformaciones XSLT