Теоретически возвращаются не все 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]
.