Subject: [xsl] Ignoring Duplicates In key() From: "Bob Portnell" <simply.bobp@xxxxxxxxx> Date: Thu, 14 Sep 2006 10:17:01 -0700 |
Here's some fun in XSLT 1.0, using variously the MSXML 3.0 or xsltproc processors (result behaviors are the same).
<factor group="0" > <number>100</number> <components> <component>widget</component> </components> </factor> <factor group="1"> <number>110</number> <components> <component>widget</component> <component>gewgaw</component> </components> </factor> <factor group="1"> <number>112</number> <components> <component>gewgaw</component> </components> </factor>
My need is to create a string of unique "components" in a "group". The original XSLT for this relied on a recursion structure and wasn't successfully blocking duplicates. My notion was to just wait for it to finish all the recursion (for its other needs), and then hit it with a key(), defined thus:
<xsl:variable name="ComponentString"> <xsl:for-each select="key('ComponentByGroup',$group)[not(.=preceding::component)]"> <xsl:sort select="."/> <xsl:if test="position() > 1"> <xsl:text>, </xsl:text> </xsl:if> <xsl:value-of select="." /> </xsl:for-each> </xsl:variable>
The desired output would be "gewgaw, widget", but for some reason I'm getting only "widget." When applied to more complex data, in one case where 12 items should be displayed, it's correctly stopping the duplicates but also making two singletons vanish.
The [not(.=preceding::component)] is the basic structure I found for reducing duplicates, but it doesn't seem to play quite nicely with the key() ... it's reducing too many!
Bob Portnell simply.bobp@xxxxxxxxx
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Grouping the node based on th, Senthilkumaravelan K | Thread | [xsl] Re: Ignoring Duplicates In ke, Bob Portnell |
Re: [xsl] logical and, and logical , Abel Braaksma | Date | Re: [xsl] logical and, and logical , Wolfgang Jeltsch |
Month |