[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: How to get unique data

Subject: Re: How to get unique data
From: ronald heller <ronald@xxxxxxxxxxx>
Date: Thu, 08 Nov 2001 14:02:52 +0100
select unique data
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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.