2011-07-19 14 views

答えて

3

.net XPathのサポートはXPath 1.0用です。ただし、SQL select呼び出しでSetParameter()呼び出しのequilentを実行できる変数のサポートを追加する簡単な方法があります。これは、matches()のような独自の関数を定義するためのサポートも提供します。 (これは私のブログの - Windward Wrocksです。)

注:不等式のサポートを日付に追加する方法を見つけることができませんでした。誰かがこれを追加する方法を知っているなら、私に知らせてください。

カスタムXsltContextを作成する必要があります。これに関する2つの参考文献は、Case-insensitive XPath in .NETAdding Custom Functions to XPathです。

XPathCustomContext.csのコードは十分に文書化されており、わかりやすいのでここでは書きません。しかし、ノートのカップル、それを使用して:あなたは私たちの 名前空間に

  1. 変更プレフィックスと名前空間値を歩いていないので。
  2. 変数をXPathに$ nameとして入れます。 XsltArgumentListに渡し、ResolveVariableで という名前($はありません)として渡します。

ここでは、次のようにXpathExpressionsを使用してEvaluate()とSelect *()のすべての呼び出しを呼び出す必要があります。文字列としてXPathを直接渡す場所でコールを使用すると、未知の関数を使用しているという例外が発生します。これは、カスタムコンテキストで渡した場合でも発生します。

private object SelectSingleNodeTyped(XPathNavigator nav, string select, XsltArgumentList parameters) 
{ 
myContext.ArgList = parameters; 
XPathExpression exp = nav.Compile(myXPathSelect); 
exp.SetContext(myContext); 
object obj = nav.Evaluate(exp); 
関連する問題