This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: How to loop over duplicate nodes to output it only once
- From: Joerg Heinicke <joerg dot heinicke at gmx dot de>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Thu, 23 May 2002 22:26:38 +0200
- Subject: Re: [xsl] How to loop over duplicate nodes to output it only once
- References: <2DE78F33FFE0D3118C0200508B94F9CA11590502@uswaumsx08medge.med.ge.com>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hello,
it's a two-level grouping problem. The first one you got, the second one
uses a concatenated key with the key 1 and the grouping element for key
2. Or expressed in XSLT:
<xsl:key name="course" match="course" use="LOCAL_CRSE_CD"/>
<xsl:key name="course2" match="course"
use="concat(LOCAL_CRSE_CD,'::',CRSE_SITE_CD)"/>
<xsl:template match="courses">
<courses>
<xsl:for-each
select="course[count(.|key('course',LOCAL_CRSE_CD)[1])=1]">
<xsl:element name="course">
<xsl:attribute name="test"><xsl:value-of
select="LOCAL_CRSE_CD"/></xsl:attribute>
<coursetypes>
<xsl:for-each
select="key('course',LOCAL_CRSE_CD)[count(.|key('course2',concat(LOCAL_CRSE_CD,'::',CRSE_SITE_CD))[1])=1]">
<coursetypeid>
<xsl:value-of select="CRSE_SITE_CD"/>
</coursetypeid>
</xsl:for-each>
</coursetypes>
</xsl:element>
</xsl:for-each>
</courses>
</xsl:template>
Regards,
Joerg
Uslu, Cihan Y (MED) schrieb:
> Hi,
> I have the following code and XML fragment. How can I achieve to output
> only once of duplicate nodes?
> Thanks.
>
> Cihan
>
> XSL code
> ---------
> <xsl:key name="course" match="course" use="LOCAL_CRSE_CD"/>
>
> <xsl:template match="courses">
> <courses>
> <xsl:for-each select="course[generate-id()=
> generate-id(key('course',LOCAL_CRSE_CD)[1])]">
> <xsl:element name="course" use-attribute-sets="course1">
> <coursetypes>
> <xsl:for-each select="key('course',LOCAL_CRSE_CD)">
> <xsl:for-each select="CRSE_SITE_CD">
> <xsl:if
> test="(self::CRSE_SITE_CD)">
> <coursetypeid>
> <xsl:value-of
> select="."/>
> </coursetypeid>
> </xsl:for-each>
> </xsl:for-each>
> </coursetypes>
> </xsl:element>
> </xsl:for-each>
> </courses>
> </xsl:template
>
> current output:
> --------------------
> <courses>
> <course>
> <LOCAL_CRSE_CD>CTD-ECPM</LOCAL_CRSE_CD>
> <coursetypes>
> <coursetypeid>U</coursetypeid>
> <coursetypeid>U</coursetypeid>
> </coursetypes>
> <course>
>
> desired output:
> --------------------
> <courses>
> <course>
> <LOCAL_CRSE_CD>CTD-ECPM</LOCAL_CRSE_CD>
> <coursetypes>
> <coursetypeid>U</coursetypeid>
> </coursetypes>
> <course>
> ...
> ...
>
> </courses>
>
> XML
> ---------------------
> <courses>
> <course num="806">
> <LOCAL_CRSE_CD>CTD-ECPM</LOCAL_CRSE_CD>
> <CRSE_SITE_CD>U</CRSE_SITE_CD>
> </course>
> <course num="2499">
> <LOCAL_CRSE_CD>CTD-ECPM</LOCAL_CRSE_CD>
> <CRSE_SITE_CD>U</CRSE_SITE_CD>
> </course>
> <course num="1145">
> <LOCAL_CRSE_CD>CTD-EQD</LOCAL_CRSE_CD>
> <CRSE_SITE_CD>U</CRSE_SITE_CD>
> </course>
> <course num="1146">
> <LOCAL_CRSE_CD>CTD-EQD</LOCAL_CRSE_CD>
> <CRSE_SITE_CD>U</CRSE_SITE_CD>
> </course>
> <course num="2405">
> <LOCAL_CRSE_CD>DFSSMS100</LOCAL_CRSE_CD>
> <CRSE_SITE_CD>U</CRSE_SITE_CD>
> </course>
> <course num="2406">
> <LOCAL_CRSE_CD>DFSSMS100</LOCAL_CRSE_CD>
> <CRSE_SITE_CD>U</CRSE_SITE_CD>
> </course>
> ....
> </courses>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list