Решение, использующее ключи для эффективности:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kValueByData" match="Value" use="@data"/>
<xsl:key name="kValueByKeyAndName" match="Value"
use="concat(generate-id(..), '+', @name)"/>
<xsl:template match="/">
<xsl:value-of select=
"key('kValueByKeyAndName',
concat(generate-id(key('kValueByData', 'name3')/../..),
'+',
'rsv-group-name'
)
)
/@data
"/>
</xsl:template>
</xsl:stylesheet>
, когда это преобразование применяется к предоставленному документу XML :
<setting>
<Key name="com.ahsay.afc.cpf.UserGroup" content="" allowMultiple="Y">
<Value name="rsv-id" inheritParentAttribute="Y" type="string" data="1328200856753" />
<Value name="rsv-group-name" inheritParentAttribute="Y" type="string" data="group 1" />
<Value name="rsv-user-type" inheritParentAttribute="Y" type="string" data="backup-user" />
<Value name="rsv-owner" inheritParentAttribute="Y" type="string" data="" />
<Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y">
<Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" />
<Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name1" />
</Key>
<Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y">
<Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" />
<Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name2" />
</Key>
</Key>
<Key name="com.ahsay.afc.cpf.UserGroup" content="" allowMultiple="Y">
<Value name="rsv-id" inheritParentAttribute="Y" type="string" data="1328200856753" />
<Value name="rsv-group-name" inheritParentAttribute="Y" type="string" data="group 2" />
<Value name="rsv-user-type" inheritParentAttribute="Y" type="string" data="backup-user" />
<Value name="rsv-owner" inheritParentAttribute="Y" type="string" data="" />
<Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y">
<Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" />
<Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name3" />
</Key>
<Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y">
<Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" />
<Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name4" />
</Key>
</Key>
</setting>
желаемый, правильный результат выдается :
group 2