Altova Mailing List Archives>Archive Index >microsoft.public.xsl Archive Home >Recent entries >Thread Prev - Re: Grouping and removing duplicates from xml: need help [Thread Next] Re: Grouping and removing duplicates from xml: need helpTo: NULL Date: 8/12/2007 8:22:00 AM On Aug 12, 3:25 pm, Martin Honnen <mahotr...@yahoo.de> wrote: > atomnyjwz...@tlen.pl wrote: > > On Aug 10, 7:09 pm, Martin Honnen <mahotr...@yahoo.de> wrote: > >> atomnyjwz...@tlen.pl wrote: > >>> how can I group by filename and remove duplicate nodes with attribute > >>> name="nazwa" using XSLT? I want transform one xml to another but I > >>> don't have any idea. Here is an example and expected result. > > The following stylesheet should do what you want: > > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0"> > > <xsl:output method="xml" indent="yes"/> > > <xsl:strip-space elements="*"/> > > <xsl:key name="file-group" > match="zad" > use="record/prop[@name='filename']"/> > > <xsl:key name="nazwa-group" > match="sub" > use="concat(../../prop[@name='filename'], '_', > prop[@name='nazwa'])"/> > > <xsl:template match="root"> > <xsl:copy> > <xsl:apply-templates select="zad[generate-id() = > generate-id(key('file-group', record/prop[@name='filename'])[1])]"/> > </xsl:copy> > </xsl:template> > > <xsl:template match="zad"> > <Obj id="File"> > <Fd name="FileName"><xsl:value-of > select="record/prop[@name='filename']"/></Fd> > </Obj> > <xsl:apply-templates select="key('file-group', > record/prop[@name='filename'])/record/zbior/sub[generate-id() = > generate-id(key('nazwa-group', concat(../../prop[@name='filename'], '_', > prop[@name='nazwa']))[1])]"/> > </xsl:template> > > <xsl:template match="sub"> > <Obj id="col"> > <xsl:copy-of select="prop"/> > </Obj> > </xsl:template> > > </xsl:stylesheet> > > When run on this input > > <root> > <zad> > <record> > <prop name="filename">c:\test1</prop> > <prop backup="nrbackup">23</prop> > <zbior> > <sub> > <prop name="nazwa">a</prop> > <prop name="level">4</prop> > <prop name="dom">df</prop> > </sub> > <sub> > <prop name="nazwa">b</prop> > <prop name="level">45</prop> > <prop name="dom">sd</prop> > </sub> > <sub> > <prop name="nazwa">a</prop> > <prop name="level">4</prop> > <prop name="dom">df</prop> > </sub> > </zbior> > </record> > </zad> > > <zad> > <record> > <prop name="filename">c:\test1</prop> > <prop backup="nrbackup">23</prop> > <zbior> > <sub> > <prop name="nazwa">a</prop> > <prop name="level">4</prop> > <prop name="dom">df</prop> > </sub> > <sub> > <prop name="nazwa">c</prop> > <prop name="level">55</prop> > <prop name="dom">rt</prop> > </sub> > <sub> > <prop name="nazwa">b</prop> > <prop name="level">45</prop> > <prop name="dom">sd</prop> > </sub> > </zbior> > </record> > </zad> > > <zad> > <record> > <prop name="filename">c:\test2</prop> > <prop backup="nrbackup">23</prop> > <zbior> > <sub> > <prop name="nazwa">aa</prop> > <prop name="level">14</prop> > <prop name="dom">dfa</prop> > </sub> > <sub> > <prop name="nazwa">cc</prop> > <prop name="level">255</prop> > <prop name="dom">srt</prop> > </sub> > <sub> > <prop name="nazwa">aa</prop> > <prop name="level">14</prop> > <prop name="dom">dfa</prop> > </sub> > </zbior> > </record> > </zad> > > </root> > > it creates the following result: > > <root> > <Obj id="File"> > <Fd name="FileName">c:\test1</Fd> > </Obj> > <Obj id="col"> > <prop name="nazwa">a</prop> > <prop name="level">4</prop> > <prop name="dom">df</prop> > </Obj> > <Obj id="col"> > <prop name="nazwa">b</prop> > <prop name="level">45</prop> > <prop name="dom">sd</prop> > </Obj> > <Obj id="col"> > <prop name="nazwa">c</prop> > <prop name="level">55</prop> > <prop name="dom">rt</prop> > </Obj> > <Obj id="File"> > <Fd name="FileName">c:\test2</Fd> > </Obj> > <Obj id="col"> > <prop name="nazwa">aa</prop> > <prop name="level">14</prop> > <prop name="dom">dfa</prop> > </Obj> > <Obj id="col"> > <prop name="nazwa">cc</prop> > <prop name="level">255</prop> > <prop name="dom">srt</prop> > </Obj> > </root> > > -- > > Martin Honnen --- MVP XML > http://JavaScript.FAQTs.com/ It works very good!!! I appreciate you. Best regards, atomnyj | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
