Subject: RE: [xsl] document() merge DISTINCT From: "Chris Bayes" <chris@xxxxxxxxxxx> Date: Wed, 19 Dec 2001 11:30:09 -0000 |
Alex, Something like this should do it <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="file" /> <xsl:template match="/"> <xsl:apply-templates select="/p/project" /> <xsl:copy-of select="document($file)/p/project[not(@name = current()/p/project/@name)]" /> </xsl:template> <xsl:template match="project"> <xsl:copy> <xsl:copy-of select="@*|*" /> <xsl:copy-of select="document($file)/p/project[@name = current()/@name]/person[not(@id = current()/person/@id)]" /> </xsl:copy> </xsl:template> </xsl:stylesheet> Ciao Chris XML/XSL Portal http://www.bayes.co.uk/xml > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of > Alex Schuetz > Sent: 19 December 2001 09:31 > To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] document() merge DISTINCT > > > Hallo; > > I have some input files with the /person/@id attribute being > unique in each file (and /project). > > input.xml > -------------------------------------------------------------- > <project name="some-name"> > <person id="1" name="name1"/> > <person id="5" name="other-name"/> > <preson id="20" name ="another-name"/> > </project> > ------------------------------------------------ > > I want to merge these files so that I get a list of all > <person> that are in any <project> but the preson/@id should > be unique, that is, no <person> element should be listed twice. > > In the book 'XSLT' from Dough Tidwell (chapter 7) there is an > example that works but is using a lot of disk reads and deep > recursion. It goes like this: > > 1: build a variable var1 as a white-space separated sorted > list of all @id . (using <xsl:for-each select="document(...)"..../> ) > 2: build a variable var2 of unique @id from var1 (by recursion); > 3: with var2 call a template that calls <xsl:for-each > select= "document(....)"../> for each id in var2 and produces > the output. > > Is there a better way to do this? > > -Alex > asc@xxxxxx > > > > > 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] document() merge DISTINCT, Alex Schuetz | Thread | Re: [xsl] document() merge DISTINCT, Alex Schuetz |
Re: [xsl] Use of XSLT to Transform , Jeni Tennison | Date | Re: [xsl] document() merge DISTINCT, Trevor Nash |
Month |