Re: [xsl] How to get unique data

Subject: Re: [xsl] How to get unique data
From: ronald heller <ronald@xxxxxxxxxxx>
Date: Thu, 08 Nov 2001 14:02:52 +0100
using the key function should do the trick:
I made a script and tested it under saxon 6.4.2.

XML I used:
<progs>
<prog pid="0">
        <item iid="0" fid="1"/>
        <item iid="0" fid="2"/>
        <item iid="0" fid="3"/>
        <item iid="0" fid="4"/>
        <item iid="0" fid="5"/>
        <item iid="1" fid="6"/>
        <item iid="1" fid="7"/>
        <item iid="1" fid="8"/>
        <item iid="1" fid="9"/>
        <item iid="1" fid="10"/>
    </prog>
    <prog pid="1">
        <item iid="2" fid="11"/>
        <item iid="2" fid="12"/>
        <item iid="2" fid="13"/>
        <item iid="2" fid="14"/>
        <item iid="2" fid="15"/>
        <item iid="3" fid="16"/>
        <item iid="3" fid="17"/>
        <item iid="3" fid="18"/>
        <item iid="3" fid="19"/>
        <item iid="3" fid="20"/>
    </prog>
</progs>

XSLT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
   <xsl:key name="item" match="item/@iid" use="." />

<xsl:template match="prog">
<prog pid="{@pid}">
<xsl:apply-templates select="descendant::item[generate-id(@iid) = generate-id(key('item', @iid))]" />
</prog>
</xsl:template>


   <xsl:template match="item">
      <item iid="{@iid}" fid="{@fid}" />
   </xsl:template>
</xsl:stylesheet>

OUTPUT:
<?xml version="1.0" encoding="utf-8"?>
<prog pid="0">
   <item iid="0" fid="1" />

   <item iid="1" fid="6" />
</prog>

<prog pid="1">
   <item iid="2" fid="11" />

   <item iid="3" fid="16" />
</prog>


Hope that helps.


RH

At 06:56 AM 11/8/01 +0800, you wrote:
Hi,
In SQL "Select Distinct ...." can get the unique data form the specify table. But in xml I can not do the same work.


    The data is as following:
    <prog pid="0">
        <item iid="0" fid="1"/>
        <item iid="0" fid="2"/>
        <item iid="0" fid="3"/>
        <item iid="0" fid="4"/>
        <item iid="0" fid="5"/>
        <item iid="1" fid="6"/>
        <item iid="1" fid="7"/>
        <item iid="1" fid="8"/>
        <item iid="1" fid="9"/>
        <item iid="1" fid="10"/>
    </prog>
    <prog pid="1">
        <item iid="2" fid="11"/>
        <item iid="2" fid="12"/>
        <item iid="2" fid="13"/>
        <item iid="2" fid="14"/>
        <item iid="2" fid="15"/>
        <item iid="3" fid="16"/>
        <item iid="3" fid="17"/>
        <item iid="3" fid="18"/>
        <item iid="3" fid="19"/>
        <item iid="3" fid="20"/>
    </prog>

    How can I use xsl in IE to get the follow data:
    <prog pid="0">
        <item iid="0" fid="1"/>
        <item iid="1" fid="6"/>
    </prog>
    <prog pid="1">
        <item iid="2" fid="11"/>
        <item iid="3" fid="16"/>
    </prog>

fid attribute's value here is not important, I just want to the first item element with the unique iid.

    I use the follow xsl
    ...
    <xsl:for-each select="//prog" order-by="@pid">
    <xsl:for-each select="item" order-by="@iid">
    <xsl:if exp="!checkDup( @iid )">
    ...show the unique data...
    </xsl:if>
    </xsl:for-each>
    </xsl:for-each>
    ...
    <xsl:script language="javascript">
    <![CDATA[
    var arrItemName = new Array();

    function checkDup( item )
    {
        var isDup = false;

        for ( i = 0; i&lt;arrItemName.length; i++ )
        {
                if ( arrItemName[i] == item ){
                        isDup = true;
                        break;
                }
        }

        if ( isDup==false ){
                var len = arrItemName.length;
                arrItemName.length ++;
                arrItemName[len] = item;
        }

        return isDup;
    }
    ]]>
    </xsl:script>

IE reported no error but still give the duplicate data, why??? Can anyone help me out???
______________________________________
ÎÒµÄQQ : 329170
ÎÒµÄICQ : 37175293
ÎÒµÄÂÛ̳: http://www3.ccw.com.cn c/c++
===================================================================
ÐÂÀËÃâ·Ñµç×ÓÓÊÏä (http://mail.sina.com.cn)
ÐÂÀË·ÖÀàÐÅÏ¢£­£­³ÇÊÐÉú»îÖ¸ÄÏ£¡ (http://classad.sina.com.cn/)
ÆßÖÖÊÖ»úͼƬ¡¢Ç§Ê×ÁåÉùÏÂÔØ¡­¡­ÐÂÀ˶ÌÐÅÎÞÏÞ¾«²Ê! (http://sms.sina.com.cn/)


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list


Current Thread