2012-04-06 4 views
2

Когда я вызываю XPathNavigator.Select ("self :: node() /../. [@ numberOfLocationsAdded! = '0'] ") Я получаю исключение из« имеет недопустимый токен »XPathNavigator.Select ("self :: node() /../ .. [@ numberOfLocationsAdded! = '0']")

Это потому, что XPathNavigator не может пройти выше корня, на котором он находится? Если да, то какие-либо предложения о том, как лучше всего справиться с этим делом?

Мы вызываем select и получаем XPathNodeIterator, когда пользователь устанавливает узел, который они хотят перебрать.
Затем для каждой итерации мы вызываем XPathNodeIterator.Current, который дает нам XPathNavigator для узла, на котором мы находимся.

А потом XPath выбирает против узла мы на, вызовите XPathNavigator.Select()

Есть ли способ сделать это эффективно? Или если нам нужно поддерживать ../ .. нужно ли нам всегда работать с корневого узла и добавлять XPath узлов, которые они хотят перебрать?

спасибо - Дэйв

ответ

1

Это синтаксически неверно в XPath 1.0:

..[condition] 

Используйте:

self::node()/../../self::*[@numberOfLocationsAdded!='0'] 

или equivalet и короче:

../parent::*[@numberOfLocationsAdded!='0'] 
+0

Я думаю, что это ./../parent::node()[@numberOfLocationsAdded!='0 '], но да, это - не может .. [condition] –

+0

@DavidThielen: Да - я обновил это ответьте с более коротким эквивалентным выражением. –

 Смежные вопросы

  • Нет связанных вопросов^_^