XSLT 変換中に、外部リソースの解決が必要になる場合が何度かあります。
XmlResolver クラスの使用
XmlResolver クラスは、外部リソースを解決するために使用されます。 次の表では、XSLT 処理中に XmlResolver が関与するタイミングについて説明します。
XSLT タスク | XmlResolver の用途 |
---|---|
スタイル シートをコンパイルします。 | スタイル シートの URI を解決します。 および 任意の xsl:import または xsl:include 要素の URI 参照を解決します。 |
スタイル シートを実行します。 | コンテキスト ドキュメントの URI を解決します。 および XSLT document() 関数の URI 参照を解決します。 |
LoadメソッドとTransform メソッドには、XmlResolver オブジェクトを引数の 1 つとして受け取るオーバーロードが含まれます。 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)
こちらも参照ください
.NET