gpt4 book ai didi

c# - 有没有办法在 .NET 的 XPath 语句中传递参数/变量?

转载 作者:行者123 更新时间:2023-11-30 12:15:45 25 4
gpt4 key购买 nike

在 C# XPath 中有没有一种方法可以像使用 SQL 选择一样传递参数?例如:

XPathExpression expr = nav.Compile("/root/employee[@name = @p1]");
expr.SetParameter ("@p1", "Smith");

然后它将在哪里处理所有转义、在其周围放置引号等?

最佳答案

.net XPath 支持是针对 XPath 1.0 的。但是,有一种简单的方法可以添加对变量的支持,您可以在其中执行相当于对 SQL 选择调用调用 SetParameter() 的操作。这也支持您定义自己的函数,例如 matches()。 (这是来 self 的博客 - Windward Wrocks。)

注意:我无法找到一种方法来添加对日期不等式的支持。如果有人知道添加这个的方法,请告诉我。

您需要创建自定义 XsltContext。两个很好的引用资料是 Case-insensitive XPath in .NETAdding Custom Functions to XPath .

XPathCustomContext.cs中的代码有据可查且简单明了,所以我不打算在这里写。然而,使用它时有几点注意事项:

  1. 更改前缀和命名空间值,这样您就不会走在我们的命名空间。
  2. 您将变量作为 $name 放入 XPath 中。你传进去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);

关于c# - 有没有办法在 .NET 的 XPath 语句中传递参数/变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6741392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com