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>
我需要有关如何为每个唯一节点循环的帮助 "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>