我需要有关如何循环每个唯一节点的帮助" set"。我期望的结果是独特的集合。我尝试了许多不同的方法,但没有尝试。似乎我总是得到所有结果,或者没有结果。
<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>
答案 0 :(得分:2)
如果当两个集合具有相同的Num
时被视为等于,则应该在密钥声明及其使用中仅使用该元素(否则,我没有&#t; t理解这个问题,我的答案毫无用处):
<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>