Re: [xsl] Got an XSLT function that does value intersection (not identity intersection)?

Subject: Re: [xsl] Got an XSLT function that does value intersection (not identity intersection)?
From: "Mukul Gandhi mukulg@xxxxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sun, 11 Jul 2021 04:28:51 -0000
On Thu, Jul 8, 2021 at 6:50 PM Roger L Costello costello@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:


> I have an XML document that consists of <row> elements:
>
> <Document>
>     <row>
>         <x>1</x>
>        <y>2</y>
>     </row>
>     <row>
>         <x>3</x>
>        <y>4</y>
>     </row>
>     <row>
>         <x>1</x>
>        <y>2</y>
>     </row>
> </Document>
>
> I want to eliminate duplicate rows.
>

The following XSLT stylesheet, also seems to work,

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                         xmlns:xs="http://www.w3.org/2001/XMLSchema";
                         xmlns:fn1="http://fn1";
                         exclude-result-prefixes="xs fn1" version="2.0">

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

   <xsl:template match="Document">
      <Document>
         <xsl:apply-templates
select="row[not(fn1:hasRowOccuredEarlier(.))]"/>
      </Document>
   </xsl:template>

   <xsl:template match="row">
      <xsl:copy-of select="."/>
   </xsl:template>

   <xsl:function name="fn1:hasRowOccuredEarlier" as="xs:boolean">
      <xsl:param name="row" as="element(row)"/>
      <xsl:sequence select="some $r in $row/preceding-sibling::row
satisfies deep-equal($r/*, $row/*)"/>
   </xsl:function>

</xsl:stylesheet>


-- 
Regards,
Mukul Gandhi

Current Thread