私はXSLTで特定の文字列の値を繰り返し呼び出すユーザー定義関数を使用しようとしています。この文字列は、単一の関数呼び出しの範囲内で変更されないXPath式の結果に基づいています。私はそれを変数に代入するのは良いことだと思っていました。
残念なことに、少なくともSaxonの実装では、関数内にノードを必要とするXPath式を使用することはできません。絶対パスに基づくノードであっても、最初にスローアウェイ線を使用して関数にルート文書を議論するのではなく、他の何か。
たとえば、次のコードではエラーがスローされます。
通常は、最初にグローバル変数を呼び出してコンテキストを与えるだけです。たとえば、udf($ rootはルートノードで識別される変数)内で次のように動作します。
しかし、Xpathを使って変数の値を修正しようとすると、for-eachの中に式を置くことができないので、これは機能しません。
私はまた、
to give it context, going on what I saw here:http://www.stylusstudio.com/xsllist/200504/post00240.html
それはどちらもうまくいかなかった。
"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:この質問は完全に理解できません。
「snazzy」とは何ですか?
"現在のコンテンツノード"とは何ですか?