XSLT 処理中の外部リソースの解決

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 クラスを実装し、これを使用してリソースを解決することができます。

  • 外部リソースにアクセスできないようにする場合は、XmlResolver の引数に null を指定します。

ネットワーク リソースに格納されているスタイル シートをコンパイルする例を次に示します。 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)

関連項目