Subject: Re: [xsl] eliminating duplicates From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx> Date: Sat, 12 May 2007 22:48:57 +0530 |
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<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>
<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>
<?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>
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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] eliminating duplicates, Abel Braaksma | Thread | RE: [xsl] eliminating duplicates, cknell |
[xsl] declaring variable as documen, bryan rasmussen | Date | [xsl] Re: declaring variable as doc, bryan rasmussen |
Month |