Как запретить XPath возвращать все, если пустая переменная сравнения? - PullRequest
0 голосов
/ 13 ноября 2009

У меня есть эта конструкция для опроса моего xml-документа с привязкой в ​​xaml.

XPath="/doc/B/lists/entry[@value=(/doc/A/selectedValue)]"

Если путь / doc / A / selectedValue пуст или не существует, возвращаются все узлы / doc / B / list / entry. Есть ли способ определить, что ничего не должно быть возвращено в случае, если / doc / A / selectedValue пусто или не существует?

Надеюсь, кто-нибудь может помочь,

Привет Мартин

1 Ответ

2 голосов
/ 13 ноября 2009

Теоретически возвращаются не все B, а только пустые. Если выбранное значение отсутствует, /doc/A/selectedValue возвращает пустой набор узлов. При сравнении со строкой (@value) пустой набор узлов преобразуется в пустую строку. Это означает, что ваше выражение будет равно

/doc/B/lists/entry[@value='']

Чтобы избежать этого, вам просто нужно убедиться, что /doc/A/selectedValue не пусто:

/doc/B/lists/entry[/doc/A/selectedValue != '' and @value=/doc/A/selectedValue]

Обратите внимание, что, как и любой XPath, /doc/A/selectedValue может возвращать несколько узлов. Более явным и оборонительным является /doc/A/selectedValue[1].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...