Похоже, вы хотите сгруппировать по ResourceID
. В этом случае прочтите Muenchian Grouping . В этом случае вы определяете свой ключ следующим образом:
<xsl:key name="resources" match="v_Add_Remove_Programs" use="ResourceID" />
И чтобы получить отдельные ResourceID
элементы, которые представляют ваши строки, сделайте это ...
<xsl:for-each select="v_Add_Remove_Programs[generate-id() = generate-id(key('resources', ResourceID)[1])]">
Но у вас есть дополнительное усложнение, так как похоже, что вам также необходимо получить отдельные программы в каждом ресурсе. Итак, вам нужно выполнить вторую группировку с помощью этого ключа ...
<xsl:key name="resourceNames" match="v_Add_Remove_Programs" use="concat(ResourceID, '|', DisplayName0)" />
И чтобы получить отдельные программы для определенного типа, сделайте это ..
<xsl:for-each select="key('resources', ResourceID)
[generate-id() = generate-id(key('resourceNames', concat(ResourceID, '|', DisplayName0))[1])]
[starts-with(DisplayName0, $type)]">
Попробуйте этот XSLT, который вы можете увидеть в действии на http://xsltfiddle.liberty -development.net / 6qVRKxa
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" html-version="5"/>
<xsl:key name="resources" match="v_Add_Remove_Programs" use="ResourceID" />
<xsl:key name="resourceNames" match="v_Add_Remove_Programs" use="concat(ResourceID, '|', DisplayName0)" />
<xsl:template match="Root">
<table>
<tr>
<th>Resource ID</th>
<th>Visio</th>
<th>Project</th>
</tr>
<xsl:for-each select="v_Add_Remove_Programs[generate-id() = generate-id(key('resources', ResourceID)[1])]">
<tr>
<td>
<xsl:value-of select="ResourceID" />
</td>
<td>
<xsl:call-template name="resourceList">
<xsl:with-param name="type" select="'Microsoft Visio'" />
</xsl:call-template>
</td>
<td>
<xsl:call-template name="resourceList">
<xsl:with-param name="type" select="'Microsoft Project'" />
</xsl:call-template>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template name="resourceList">
<xsl:param name="type" />
<xsl:for-each select="key('resources', ResourceID)
[generate-id() = generate-id(key('resourceNames', concat(ResourceID, '|', DisplayName0))[1])]
[starts-with(DisplayName0, $type)]">
<xsl:value-of select="DisplayName0" />
<br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>