Разрешение внешних ресурсов в ходе обработки 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)

См. также