パスコールを必要とするudfの変数の値を設定する方法

私は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にすばらしい方法がありますか?

0
関連するXMLの例を別の質問に投稿しました。これは、別の質問を検索するXPath式で現在のノードに関連する属性(for-each節にある)を使用する方法の問題に焦点を当てています。その質問はこちらリンク
追加された 著者 David R,
@デビッドR:残念ながら、質問を理解することは困難です。あなたは、質問を編集して、それを再現できるように完全な(しかし短い)例を提供してください。また、達成したいことを正確に教えてください。また、対応する(可能な限り短い)完全なソースXML文書を提供してください。特に、「変数の値を固定するためにXpathを使用しようとする」という意味は何ですか?
追加された 著者 Dimitre Novatchev,
@ David R:ありがとう、私は新しい質問に答えました。
追加された 著者 Dimitre Novatchev,

1 答え

私の質問は次のとおりです:

     

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. "現在のコンテンツノード"とは何ですか?

0
追加された
最初の質問にお返事いただきありがとうございます。 2番目のリクエストに対するスペルを記入してください。詳細はこちらです:その質問はここにあります。リンク
追加された 著者 David R,