2009-11-13 3 views
0

У меня есть эта конструкция, чтобы подвергнуть сомнению мой XML-документ со связыванием в xaml.Как предотвратить XPath от возврата всего, если пустая переменная-переменная?

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

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

Надежда кто-то может помочь,

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

ответ

2

В теории, не все 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].

+0

С несколькими онлайн-тестами он отлично работает, но в моем XAML-привязке он всегда возвращает значение содержимого первого элемента пути. – martin

+0

Я обнаружил, что проблема связана с полосой данных в моем исходном коде. – martin

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