#.net #xml #xpath #xpathnavigator
#.net #xml #xpath #xpathnavigator
Вопрос:
Если я получу XPathNavigator и использую его для компиляции XPathExpression exp, какие существуют ограничения на то, как я могу использовать 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 resu<
}
Ответ №1:
Вы можете свободно использовать это выражение в других навигаторах. По словам Даниэля Каццулино, документ, из которого вы создаете исходный навигатор, не имеет значения, поскольку компиляция выражения xpath не зависит от экземпляра документа.
http://weblogs.asp.net/cazzu/archive/2003/10/07/30888.aspx