次の方法で共有


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

  • 外部リソースにアクセスできないようにする場合は、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)

こちらも参照ください