Еще раз, проблема в том, что если вы хотите сказать «первый узел с этим содержимым под этим корнем появляется в этой позиции в item
узле », то вы должны добавить «позицию в узле item
к ключу. Вы можете сделать это, используя два отдельных ключа, как это делает решение Dimitre, или изменить свой ключ на:
use="concat(normalize-space(.), ' ',
count(./preceding-sibling::something), ' ', generate-id(./ancestor::root))"/>
А затем сделайте ваши два тестовых выражения похожими на:
<xsl:if test="generate-id() = generate-id(key('item-by-value',
concat(normalize-space(.), ' 0 ', generate-id(./ancestor::root))))">
и
<xsl:if test="generate-id() = generate-id(key('item-by-value',
concat(normalize-space(.), ' 1 ', generate-id(./ancestor::root))))">