Subject: Re: [xsl] Merging common XML tree From: Mathieu Malaterre <mathieu.malaterre@xxxxxxxxx> Date: Thu, 8 Jul 2010 12:49:35 +0200 |
On Thu, Jul 8, 2010 at 12:02 PM, Florent Georges <lists@xxxxxxxxxxxx> wrote: > Mathieu Malaterre wrote: > > Hi, > >> <dirs> >> <dir name="A"> >> <dir name="B"> >> <file name="C"> >> </dir> >> </dir> >> <dir name="A"> >> <dir name="B"> >> <file name="D"> >> </dir> >> </dir> >> </dirs> > >> and my target output tree should looks like: > >> <dirs> >> <dir name="A"> >> <dir name="B"> >> <file name="C"> >> <file name="D"> >> </dir> >> </dir> >> </dirs> > > I would use recursive grouping: > > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:my="..." > exclude-result-prefixes="#all" > version="2.0"> > > <xsl:output indent="yes"/> > > <xsl:template match="dirs"> > <xsl:copy> > <xsl:call-template name="my:handle-dirs"> > <xsl:with-param name="dirs" select="*"/> > </xsl:call-template> > </xsl:copy> > </xsl:template> > > <xsl:template name="my:handle-dirs"> > <xsl:param name="dirs" as="element(dir)+"/> > <xsl:for-each-group select="$dirs" group-by="@name"> > <dir name="{ current-grouping-key() }"> > <xsl:copy-of select="current-group()/file"/> > <xsl:if test="current-group()/dir"> > <xsl:call-template name="my:handle-dirs"> > <xsl:with-param name="dirs" select=" > current-group()/dir"/> > </xsl:call-template> > </xsl:if> > </dir> > </xsl:for-each-group> > </xsl:template> > > </xsl:stylesheet> > > You may have to adapt the content of the for-each-group for the > precise ordering you want between files and dirs when a dir > contains both. I have a limited set of filepath. For instance I cannot have subdirectory if a file is present in a directory... So I believe your script will work just fine for me ! Thanks a lot ! This saved me quite some time, in this yak-shaving task of utilizing cmake to generate targetset structure for docbook olinking ... Thanks again everyone, -- Mathieu
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Merging common XML tree, Florent Georges | Thread | [xsl] "mode" not working as expecte, Dick Penny |
Re: AW: [xsl] Merging common XML tr, Michael Kay | Date | [xsl] "mode" not working as expecte, Dick Penny |
Month |