Ключи могут быть вашими друзьями здесь ...
<xsl:key name="types" match="type" use="@name" />
<xsl:key name="groups" match="group" use="@name" />
Тогда вы можете сделать это, даже не нуждаясь в distinct-values
, потому что вы не получите повторяющиеся узлы, возвращенные таким образом:
<xsl:for-each select="key('groups', key('types', metadata/properties/property/@type)/@group)">
Например, попробуйте этот XSLT
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:key name="types" match="type" use="@name" />
<xsl:key name="groups" match="group" use="@name" />
<xsl:template match="/">
<xsl:for-each select="key('groups', key('types', metadata/properties/property/@type)/@group)">
<xsl:value-of select="concat(@owner, ' ')" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
На самом деле вы можете упростить xsl:for-each
до этого:
<xsl:value-of select="key('groups', key('types', metadata/properties/property/@type)/@group)/@owner" separator=" " />