Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Аноним, Вы писали:
А>>Поскольку generate-id с nodeset-ом в аргументе равнозначен generate-id(nodeset[1]), то вызов ключа для потомков items2 будет находить элементы из items2 только в том случае, если элементов с соответствующим src нет в items1 (document order и все такое), а поскольку они там есть, то мы имеем то, что имеем. В данном случае можно делать составной ключ — use="concat(ancestor::items/@name, '|', @src)" — это даст возможность использовать ключ в нужном контексте.
L>Не надо этого делать, это плохой подход — завтра у вас окажется, что items встречается палка в атрибуте name и все, приплыли.
L>Правильный подход описан двумя постами ниже.
Насчет имени и палки вы правы, но это не значит, что сам тема составных ключей плоха, просто их надо использовать с умом, вот и все.
По теме: use="concat(generate-id(ancestor::items), '|', @src)". По спецификации generate-id не вернет палку, так что generate-id + | + str — всегда однозначно определенный идентификатор элемента с палкой и с какой-то строкой на конце.