C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ASP.NETでのXSLT document()関数の利用


(過去ログ 83 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■48972 / inTopicNo.1)  ASP.NETでのXSLT document()関数の利用
  
□投稿者/ aetos (278回)-(2010/04/19(Mon) 13:22:00)

分類:[ASP.NET (C#)] 

2010/04/19(Mon) 13:23:54 編集(投稿者)
2010/04/19(Mon) 13:23:02 編集(投稿者)

VS2008 です。

ASP.NET でコントロールを作っています。このコントロールは、とある xml 文書を xslt でフォーマットして表示します。
その xslt の中で、document() 関数を使って別の xml を読み込みたいと思っています。
読み込む xml は App_Data フォルダ下の特定ディレクトリにあって、ただそれだけであれば、

 document('../App_Data/hogeDir/hoge.xml')

のようにして問題なく使うことができます。

何が問題かというと、xml ファイルがある物理ディレクトリ名が実行時にならないとわからないということです。
カスタム VirtualPathProvider を使用しており、~/App_Data/hogeDir/ という仮想パスが、実行時にどの物理パスになるのか、あらかじめわからないのです(hogeDir という物理ディレクトリはありません)。

 document('~/App_Data/hogeDir/hoge.xml')

と書いてもダメでした。

おそらく、XslCompiledTransform.Transform の第4引数に渡す XmlResolver でどうにかしてやればいいものと思っています。
が、Server.MapPath とか HostingEnvironment.MapPath とかやってみても、hogeDir を含む実在しない物理パスが返されてしまいます。

XmlUrlResolver の派生クラスを作り、GetEntiry で Stream を返してやればいいんだとは思いますが、GetEntiry の第一引数には

 file:///C:/Program Files (x86)/Common Files/Microsoft Shared/DevServer/9.0/~/App_Data/hogeDir/hoge.xml

のようなものが渡ってきてしまいます。
GetEntiry に ~/App_Data/hogeDir/hoge.xml のようなアプリケーション相対パスを渡せればなんとかなると思うのですが、そのための ResolveUri の適切な実装がわかりません。

どうすればよいものでしょうか?
よろしくお願いします。
引用返信 編集キー/
■48974 / inTopicNo.2)  Re[1]: ASP.NETでのXSLT document()関数の利用
□投稿者/ Hongliang (604回)-(2010/04/19(Mon) 13:53:07)
Uri(String, UriKind) コンストラクタで相対 URI を作って返せばいいんでは?
引用返信 編集キー/
■48981 / inTopicNo.3)  Re[2]: ASP.NETでのXSLT document()関数の利用
□投稿者/ aetos (279回)-(2010/04/19(Mon) 15:49:03)
2010/04/19(Mon) 16:51:29 編集(投稿者)

No48974 (Hongliang さん) に返信
> Uri(String, UriKind) コンストラクタで相対 URI を作って返せばいいんでは?

うまくいきました。ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -