Поделиться через


Разрешение внешних ресурсов во время обработки XSLT

Во время преобразования XSLT может возникнуть несколько случаев, когда потребуется обработать внешние ресурсы.

Использование класса XmlResolver

Класс XmlResolver используется для разрешения внешних ресурсов. В следующей таблице описывается, когда XmlResolver участвует в процессе обработки XSLT.

Задача XSLT Для чего используется XmlResolver
Скомпилируйте таблицу стилей. Определите универсальный идентификатор ресурса (URI) таблицы стилей.

-и-

Разрешите ссылки на универсальный код ресурса (URI) в любом элементе xsl:import или xsl:include.
Выполните таблицу стилей. Определите URI контекстного документа.

-и-

Разрешение ссылок на URI в любых функциях XSLT document() .

Методы Load и Transform включают перегрузки, которые принимают объект XmlResolver в качестве одного из аргументов. XmlResolver Если значение не указано, используется значение по умолчанию XmlUrlResolver без учетных данных.

В следующем списке описывается, когда может потребоваться указать XmlResolver объект:

  • Если процесс XSLT должен получить доступ к сетевому ресурсу, которому требуется проверка подлинности, можно использовать XmlResolver с необходимыми учетными данными.

  • Если вы хотите ограничить доступ к ресурсам, к которым может получить доступ процесс XSLT, можно использовать правильный XmlSecureResolver набор разрешений. Используйте класс XmlSecureResolver, если необходимо открыть ресурс, который вы не контролируете, или является ненадежным.

  • Если вы хотите настроить поведение, можно реализовать собственный XmlResolver класс и использовать его для разрешения ресурсов.

  • Если вы хотите убедиться, что внешние ресурсы не доступны, можно указать null для аргумента XmlResolver .

Пример

В следующем примере компилируется таблица стилей, которая хранится в сетевом ресурсе. Объект XmlUrlResolver задает учетные данные, необходимые для доступа к таблице стилей.

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

См. также