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