This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: How to loop over duplicate nodes to output it only once


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]