如果我得到一个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;
}
答案 0 :(得分:1)
您可以在其他导航器上自由使用该表达式。根据Daniel Cazzulino的说法,创建原始导航器的文档是无关紧要的,因为xpath表达式编译独立于文档实例。
http://weblogs.asp.net/cazzu/archive/2003/10/07/30888.aspx