Могу ли я использовать XPathExpression, скомпилированный из одного навигатора с другим навигатором? - PullRequest
2 голосов
/ 29 апреля 2011

Если я получу XPathNavigator и использую его для компиляции выражения XPathExpression, какие ограничения существуют на пути использования exp? Могу ли я использовать exp с другим навигатором? Я знаю, что он работает и, похоже, дает правильные результаты, даже если компилятор XPathNavigator был сформирован из документа или узла, который сильно отличается от оценочного XPathNavigator. Но я не знаю, безопасно ли это.

Вот простой пример того, что я имею в виду. Это бессмысленно, но иллюстрирует смысл

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 Ответ

1 голос
/ 26 июня 2013

Вы можете свободно использовать это выражение на других навигаторах. По словам Даниэля Каззулино, документ, из которого вы создаете исходный навигатор, не имеет значения, поскольку компиляция выражений xpath не зависит от экземпляра документа.
http://weblogs.asp.net/cazzu/archive/2003/10/07/30888.aspx

...