1

別のxmlファイルの名前を含むxmlファイルがあります:

スタイルシート内で @href を検出し、document() 関数を介してドキュメントを開きます

ドキュメント(@href)

「最初の引数の文字列が計算されるノードのベースURI」のベースで私のURIResolver.resolve(fname、base)を呼び出す必要があります

ドキュメント(@href,.)

「現在のノードのベースURI」のベースで私のURIResolver.resolve(fname、base)を呼び出す必要があります

ただし、実際には Xalan/J を使用

ドキュメント(@href)

空白です

ドキュメント(@href,.)

アプリケーションの現在のディレクトリを指定しています

URIResolver がファイルを見つけられるように base を設定するにはどうすればよいですか?

4

1 に答える 1

1

これに注意してください

document(@href)

これに等しい

document(string(@href),@href)

そして多分また

document(string(@href),.)

http://www.w3.org/TR/xslt#documentから:

ドキュメント関数に引数が 1 つだけあり、その引数がノード セットである場合、結果は、引数ノード セット内の各ノードについて、最初の引数が文字列であるドキュメント関数を呼び出した結果の和集合になります。ノードの値であり、2 番目の引数はノードを唯一のメンバーとするノード セットです。

その後

相対 URI を絶対 URI に解決するためのベース URI として、第 2 引数 node-set 内のドキュメント順で最初のノードのベース URI ([3.2 ベース URI] を参照) が使用されます。

でもこれは:

document(string(@href))

スタイルシート URI をリゾルバーとして使用します。なぜなら:

ドキュメント関数の最初の引数がノード セットでない場合、最初の引数は、string 関数を呼び出したかのように文字列に変換されます。この文字列は URI 参照として扱われます。

その後

2 番目の引数を省略すると、ドキュメント関数の呼び出しを含む式を含むスタイルシート内のノードがデフォルトになります。

質問について

URIResolver がファイルを見つけられるように base を設定するにはどうすればよいですか?

回答: 2 番目の形式と@xml:baseを使用します

于 2010-11-16T22:20:46.147 に答える