我可以使用从一个导航器使用不同导航器编译的XPathExpression吗?

时间:2011-04-29 19:22:35

标签: .net xml xpath xpathnavigator

如果我得到一个XPathNavigator,并用它来编译XPathExpression exp,那么我可以使用exp的方式有哪些限制?我可以使用不同的导航器使用exp吗?我知道它运行,并且似乎给出了正确的结果,即使编译XPathNavigator是由一个与Evaluating XPathNavigator非常不同的doc或节点组成的。但我不知道它是否安全。

这是我的意思的基本例子。这是荒谬的,但说明了这一点

private object TestXPath(XmlNode n1, XmlNode n2)
{
  XPathNavigator nav1 = n1.CreateNavigator();
  XPathExpression exp = nav1.Compile("somexpath");

  // evaluate using the navigator that compiled exp
  object result = n1.Evaluate(exp);
  if (result == null)
  {
    XPathNavigator nav2 = n2.CreateNavigator();
    // evaluate using a navigator that did NOT compile exp.  Is this legal?
    result = nav2.Evaluate(exp);
  }
  return result;
}

1 个答案:

答案 0 :(得分:1)

您可以在其他导航器上自由使用该表达式。根据Daniel Cazzulino的说法,创建原始导航器的文档是无关紧要的,因为xpath表达式编译独立于文档实例。
http://weblogs.asp.net/cazzu/archive/2003/10/07/30888.aspx