xsl-list
[Top] [All Lists]

Re: [xsl] Variable containing unique values

2008-05-21 09:01:57
Following is a XSLT 1.0 solution to this problem based on Muenchian
grouping technique:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                       version="1.0">

<xsl:output method="text" />

<xsl:key name="x" match="rolloverDate" use="." />

<xsl:template match="/">
  <xsl:for-each select="//rolloverDate[generate-id() =
generate-id(key('x',.)[1])]">
    <xsl:value-of select="." /><xsl:if test="position() != last()">,</xsl:if>
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

If you want to store the unique data list in a variable, you can do:

<xsl:variable name="uniqueDates">
  <xsl:for-each select="//rolloverDate[generate-id() =
generate-id(key('x',.)[1])]">
    <xsl:value-of select="." /><xsl:if test="position() != last()">,</xsl:if>
  </xsl:for-each>
</xsl:variable>

PS: The values in this example are comma separated.

On Wed, May 21, 2008 at 7:29 PM, Hesselberth, Jan
<Jan(_dot_)Hesselberth(_at_)northernrock(_dot_)co(_dot_)uk> wrote:
I've read the book and looked at the examples but I can't manage to
create a variable containing unique values for my xml. All I get is a
list of all values.
I need a variable containing unique values for rolloverDate. I've tried
all sorts of rules for testing for current rolloverDate not being equal
to previous rollover dates but I can't get it to work.
Can you help please.
Regards
       Jan Hesselberth

The code I have is

       <xsl:variable name="unique-dates">
               <xsl:for-each
               select
="REPORT/Rollover/RolloverForecast/summaryAccount/element">
                       <xsl:sort
select="/rolloverDate[not(preceding::rolloverDate= current())]"/>
               <xsl:copy-of select="."/>
               </xsl:for-each>
       </xsl:variable>

The xml snippet looks like

<summaryAccount id="12345">
       <isAutomatedRollover>N</isAutomatedRollover>
       <element id="1">
               <rolloverDate>2008-04-04</rolloverDate>
       </element>
       <element id="2">
               <rolloverDate>2008-04-04</rolloverDate>
       </element>
</summaryAccount>
<summaryAccount id="12346">
       <isAutomatedRollover>Y</isAutomatedRollover>
       <element id="1">
               <rolloverDate>2008-04-22</rolloverDate>
       </element>
</summaryAccount>
<summaryAccount id="12347">
       <isAutomatedRollover>Y</isAutomatedRollover>
       <element id="1">
               <rolloverDate>2008-04-22</rolloverDate>
       </element>
       <element id="2">
               <rolloverDate>2008-04-17</rolloverDate>
       </element>
</summaryAccount>


-- 
Regards,
Mukul Gandhi

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--