Re: [xsl] Duplicate Elimination

Subject: Re: [xsl] Duplicate Elimination
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxx>
Date: Wed, 12 Mar 2014 18:09:14 -0400
Hi,

I hate to say it, but this is nicely handled as a grouping problem:

<xsl:for-each-group select="(A|B)/Date" group-by=".">
  <xsl:apply-templates select=".'/> <!-- applies a template to the
first member of each group -->
  <!-- select="current-group()[1]" to be more explicit -->
</xsl:for-each-group>

Many grouping problems are hidden in plain sight. :-)

Cheers, Wendell



On Wed, Mar 12, 2014 at 5:14 PM, Martin Holmes <mholmes@xxxxxxx> wrote:
> If the text content of the element is all you care about, you could do
> something like this:
>
> <xsl:variable name="distinctDates">
> <xsl:for-each select="distinct-values(A/Date | B/Date)">
>         <xsl:sort/>
>         <Date><xsl:value-of select="."/></Date>
> </xsl:for-each>
> </xsl:variable>
>
> <xsl:apply-templates select="$distinctDates/Date"/>
>
>
>
>
> On 14-03-12 01:34 PM, Ihe Onwuka wrote:
>>
>> I have Date elements coming from 2 different parents.
>>
>> <A>
>>    <Date>blah</Date>
>> </A>
>>
>> <B>
>>      <Date>blah</Date>
>> </B>
>>
>> I am doing
>>
>> <xsl:apply-templates select="A/Date | B/Date>
>>     <xsl:sort select="." order="ascending"/>
>> </xsl:apply-templates>
>>
>> and
>>
>> <xsl:template match="Date">
>>   etc
>> </xsl:template>
>>
>> I have noticed that when A and B have a child element of the same date
>> the Date template gets fired on each occasion, whereas I only want it
>> fired once
>>
>> I  thought the union operator in the apply-templates would have the
>> effect of  eliminating duplicates or aren't they duplicates if they
>> have the same content but come from different parents.
>



-- 
Wendell Piez | http://www.wendellpiez.com
XML | XSLT | electronic publishing
Eat Your Vegetables
_____oo_________o_o___ooooo____ooooooo_^

Current Thread