Dav*_*len 5 c# xpath parameter-passing
C# XPath 中是否有一种方法可以像使用 SQL select 那样传递参数?例如:
XPathExpression expr = nav.Compile("/root/employee[@name = @p1]");
expr.SetParameter ("@p1", "Smith");
Run Code Online (Sandbox Code Playgroud)
然后它将在哪里处理所有转义,在其周围放置引号等?
.net XPath 支持适用于 XPath 1.0。然而,有一种简单的方法来添加对变量的支持,您可以在 SQL select 调用上执行相当于 SetParameter() 调用的操作。这还支持您定义自己的函数,例如 matches()。(这是来自我的博客 - Windward Wrocks。)
\n\n注意:我无法找到一种方法来添加对日期不平等的支持。如果有人知道添加此内容的方法,请告诉我。
\n\n您需要创建一个自定义 XsltContext。对此有两个很好的参考:.NET 中的不区分大小写的 XPath和向 XPath 添加自定义函数。
\n\nXPathCustomContext.cs中的代码有详细记录且简单明了,因此我不打算在这里编写它。不过使用时有几点注意事项:
\n\n这是重要的 \xe2\x80\x93 您必须使用 XpathExpressions 调用所有 Evaluate() 和 Select*() 调用,如下所示。如果您使用直接将 XPath 作为字符串传递的调用,您将收到一个异常,表明您正在使用未知函数。即使您传入自定义上下文,也会发生这种情况。
\n\nprivate object SelectSingleNodeTyped(XPathNavigator nav, string select, XsltArgumentList parameters)\n{\nmyContext.ArgList = parameters;\nXPathExpression exp = nav.Compile(myXPathSelect);\nexp.SetContext(myContext);\nobject obj = nav.Evaluate(exp);\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1855 次 |
| 最近记录: |