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

Re: eliminating duplicates

Subject: Re: eliminating duplicates
From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx>
Date: Sat, 12 May 2007 22:48:57 +0530
Re:  eliminating duplicates
Taking help from Abel's ideas, I find this solution nice:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">

<xsl:output method="xml" indent="yes" />

 <xsl:template match="x">
   <x>
    <xsl:for-each select="edge[not(some $i in preceding-sibling::edge
satisfies deep-equal($i, .))]">
      <xsl:copy-of select="." />
    </xsl:for-each>
   </x>
 </xsl:template>

</xsl:stylesheet>

This when applied to the XML:

<x>
 <edge source="IGetter" target="CGetter" dependency="positive"/>
 <edge source="IGetter" target="CGetter" dependency="positive"/>
 <edge source="IGetter" target="CCount" dependency="positive"/>
 <edge source="ICount" target="IGetter" dependency="positive"/>
 <edge source="ICount" target="CGetter" dependency="positive"/>
 <edge source="ICount" target="ICount" dependency="positive"/>
 <edge source="ICount" target="CCount" dependency="positive"/>
 <edge source="ICount" target="CCount" dependency="positive"/>
</x>

Produces output:

<?xml version="1.0" encoding="UTF-8"?>
<x>
  <edge source="IGetter" target="CGetter" dependency="positive"/>
  <edge source="IGetter" target="CCount" dependency="positive"/>
  <edge source="ICount" target="IGetter" dependency="positive"/>
  <edge source="ICount" target="CGetter" dependency="positive"/>
  <edge source="ICount" target="ICount" dependency="positive"/>
  <edge source="ICount" target="CCount" dependency="positive"/>
</x>

On 5/11/07, Garvin Riensche <g.riensche@xxxxxxx> wrote:
Hello,

I am wondering what's the best way of getting rid of duplicate nodes
which contain more than one attribute. Suppose I have den following xml:


<edge source="IGetter" target="CGetter" dependency="positive"/> <edge source="IGetter" target="CGetter" dependency="positive"/> <edge source="IGetter" target="CCount" dependency="positive"/> <edge source="ICount" target="IGetter" dependency="positive"/> <edge source="ICount" target="CGetter" dependency="positive"/> <edge source="ICount" target="ICount" dependency="positive"/> <edge source="ICount" target="CCount" dependency="positive"/> <edge source="ICount" target="CCount" dependency="positive"/>

How do I get rid of one
<edge source="IGetter" target="CGetter" dependency="positive"/>
and one
<edge source="ICount" target="CCount" dependency="positive"/>
which appear twice?

If there was only one attribute, lets say "source" it would be simple:

<xsl:for-each
select="//edge[not(./@source=preceding-sibling::edge/@source)]">
  <xsl:copy-of select="."/>
</xsl:for-each>

So I thought with more attributes this would work:
<xsl:for-each select="//edge[not(./@source=preceding-sibling::edge/@source
               and ./@target=preceding-sibling::edge/@target
               and ./@dependency=preceding-sibling::edge/@dependency
               )]">
</xsl:for-each>

But of course it doesen't because in one iterartion the
"preceding-siblings" doesn't point to the same element.

So, any help would be appreciated on how to get rid of duplicates.

Regards,
Garvin


--
Regards,
Mukul Gandhi

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.