Return XSLT 中的不同节点

Return distinct nodes in XSLT

我需要有关如何为每个唯一节点循环的帮助 "set"。我期望的结果是独特的集合。我尝试了很多不同的方法,但没有。似乎我总是得到所有结果,或者 none.

 <Res>
        <ResQ>
            <set>
                <No>1</No>
                <Desc>test</Desc>
                <Num>123</Num>
            </set>
            <set>
                <No>2</No>
                <Desc>test</Desc>
                <Num>111</Num>
            </set>
            <set>
                <No>3</No>
                <Desc>test</Desc>
                <Num>100</Num>
            </set>
        </ResQ>
    </Res>
    <Res>
        <ResQ>
            <set>
                <No>1</No>
                <Desc>test</Desc>
                <Num>333</Num>
            </set>
            <set>
                <No>2</No>
                <Desc>test</Desc>
                <Num>123</Num>
            </set>
            <set>
                <No>3</No>
                <Desc>test</Desc>
                <Num>555</Num>
            </set>
        </ResQ>
    </Res>

我试过了,但没有得到想要的结果。

<xsl:key name="keyTest" match="//set" use="concat(No, '+', Desc,'+',Num)"/> 

<xsl:for-each select="//set[generate-id(.) = generate-id(key('keyTest', concat(No, '+', Desc,'+',Num))[1])]" >
        <xsl:call-template name="row">
                    <xsl:with-param name="rb" select="No" />
                    <xsl:with-param name="desc" select="Desc" />
                    <xsl:with-param name="number" select="Num" />
         </xsl:call-template>
</xsl:for-each>

如果 两个集合在 Num 相同时被认为是相等的,你应该在键声明和它的使用中只使用那个元素(否则,我没看懂问题,我的回答也没用):

<xsl:key name="keyTest" match="//set" use="Num"/>
...
<xsl:for-each select="//set[generate-id(.) = generate-id(key('keyTest', Num)[1])]" >
    <xsl:call-template name="row">
        <xsl:with-param name="rb" select="No" />
        <xsl:with-param name="desc" select="Desc" />
        <xsl:with-param name="number" select="Num" />
    </xsl:call-template>
</xsl:for-each>