Я бы хотел запросить что-то вроде
// модель [@id = (// item / @ refid)] для
получить все "модели", имеющие ссылки
идентификатор в "списке"
Основная проблема здесь заключается в том, что вы не уверены , а на самом деле не используете движок XPath для оценки выражений, которые вы придумали.
Если вы оцениваете предложенное вами выражение XPath:
//model[ @id = (//item/@refid) ]
Вы увидите, что он выбирает ровно (два) элемента model
, на атрибуты которых id
ссылаются атрибуты refid
элементов item
, которые являются потомками list
.
@ Йорн-Хорстманн в своем ответе уже объяснил, почему вы получаете эти результаты.
Небольшое замечание: обычно избегайте использования //
сокращения . Это вызывает сканирование всего документа и является очень неэффективным. В этом случае я бы использовал эквивалентный, но, вероятно, более быстрый способ оценки выражения XPath:
/*/catalogue/model[@id = /*/list/item/@refid]