C#XPathにはSQLの選択と同様にパラメータを渡す方法はありますか?たとえば、.NETのXPathステートメントでパラメータ/変数を渡す方法はありますか?
XPathExpression expr = nav.Compile("/root/employee[@name = @p1]");
expr.SetParameter ("@p1", "Smith");
ここで、すべてのエスケープを処理し、その周りにクォートを配置するなどです。
C#XPathにはSQLの選択と同様にパラメータを渡す方法はありますか?たとえば、.NETのXPathステートメントでパラメータ/変数を渡す方法はありますか?
XPathExpression expr = nav.Compile("/root/employee[@name = @p1]");
expr.SetParameter ("@p1", "Smith");
ここで、すべてのエスケープを処理し、その周りにクォートを配置するなどです。
.net XPathのサポートはXPath 1.0用です。ただし、SQL select呼び出しでSetParameter()呼び出しのequilentを実行できる変数のサポートを追加する簡単な方法があります。これは、matches()のような独自の関数を定義するためのサポートも提供します。 (これは私のブログの - Windward Wrocksです。)
注:不等式のサポートを日付に追加する方法を見つけることができませんでした。誰かがこれを追加する方法を知っているなら、私に知らせてください。
カスタムXsltContextを作成する必要があります。これに関する2つの参考文献は、Case-insensitive XPath in .NETとAdding Custom Functions to XPathです。
XPathCustomContext.csのコードは十分に文書化されており、わかりやすいのでここでは書きません。しかし、ノートのカップル、それを使用して:あなたは私たちの 名前空間に
ここでは、次のように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);