質問: パスコールを必要とするudfの変数の値を設定する方法 私はXSLTで特定の文字列の値を繰り返し呼び出すユーザー定義関数を使用しようとしています。この文字列は、単一の関数呼び出しの範囲内で変更されないXPath式の結果に基づいています。私はそれを変数に代入するのは良いことだと思っていました。 残念なことに、少なくともSaxonの実装では、関数内にノードを必要とするXPath式を使用することはできません。絶対パスに基づくノードであっても、最初にスローアウェイ線を使用して関数にルート文書を議論するのではなく、他の何か。 たとえば、次のコードではエラーがスローされます。 ``` ``` 通常は、最初にグローバル変数を呼び出してコンテキストを与えるだけです。たとえば、udf($ rootはルートノードで識別される変数)内で次のように動作します。 ``` ``` しかし、Xpathを使って変数の値を修正しようとすると、for-eachの中に式を置くことができないので、これは機能しません。 私はまた、 ``` ``` to give it context, going on what I saw here: それはどちらもうまくいかなかった。 "myleaf"を定義するために使用されるXpath式がコンテキストノードに依存するため、現在のコンテキストノードの値に基づいてXpathに1つのパスを呼び出す方法がわからないため、変数を関数に渡すことは問題になります。 たとえば、この関数を呼び出すコードでは、次のようなものがあります。 ``` ``` 私は/ potato/stem [eye]ノードのコンテキストで作業しており、udfを使って@sessionIDと同じ値を持つ/ potato/stem [scc]ノードを探しています。 XMLツリーのまったく異なる部分の他のノードを検索するXPathの述語で、現在のコンテキストノードから@sessionIDの値を参照する方法がわからないので、udfを使用していました。プロセッサが毎回それを調べるのではなく、文字列に変数を使用しようとするまではうまくいきました。 私は1つのレベルを深くすることを避けようとしていました。(関数自体を名前付きテンプレートと呼ぶか、オリジナルのfor-each内に名前付きテンプレートを入れ、 だから私の質問は: A.ユーザー定義関数の場合、XPath式に依存する変数を設定するにはどうすればよいですか? B.テストしようとしているXpath式の述語で現在のコンテンツノードから引き出された値を使用するには、Xpathにすばらしい方法がありますか?
回答: > 私の質問は次のとおりです: > > > > A。ユーザー定義関数の場合、依存する変数を設定するにはどうすればよいですか > XPath式で? > > > > B。現在のものから引き出された値を使用するためにXpathにすばらしい方法がありますか? > あなたが試しているXpath式の述語にあるコンテンツノード > テストする? > > 両方の質問はかなり不明です。 A:私はあなたが実際に意味すると思います: > " `xsl:function` の中で、依存する変数を定義する方法 > コンテキストノード? " > > **The answer**: You can't. By definition there is no context node within an `xsl:function`. This is defined by the **W3C XSLT 2.0 specification** in the following way: > "*スタイルシート関数の本体の中で、フォーカスは最初は > 未定義;これは、コンテキスト項目を参照しようとする試みが、 > コンテキスト位置、またはコンテキストサイズが回復不能な動的エラーです。 > [XPDY0002] "* > > ただし、目的のコンテキストノード(または現在のものとして使用する必要があるドキュメントノード)だけをパラメータとして渡すことができます。あるいは、グローバルに定義された変数を参照することもできます。 B:この質問は完全に理解できません。 1. 「snazzy」とは何ですか? 2. "現在のコンテンツノード"とは何ですか?