[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Transform flat structure into hierarchy
I'd do a recursive template that selects only those PublicationElements that are children of the current element. I don't think there is any need to use the Muenchian method. <!-- this is untested --> <xsl:template match="Publication"> <xsl:apply-templates select="PublicationElements[ParentIndex = -1]"/> </xsl:template> <!-- copy all nodes that don't have their own template --> <xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template> <xsl:template match="PublicationElements"> <!-- copy the <PublicationElements> and all the children, and also copy <PublicationElements>s that have the current node set as the parent --> <xsl:copy> <xsl:apply-templates select="node() | @*"/> <xsl:apply-templates select="../PublicationElements[ParentIndex = current()/SelfIndex]"/> </xsl:copy> </xsl:template> If you think using keys would be faster, then you could also add: <xsl:key name="children" match="PublicationElements" use="ParentIndex"/> and replace the apply-templates with: <xsl:apply-templates select="key('children', -1)"/> and <xsl:apply-templates select="key('children', SelfIndex)"/> Either way, it's not really a grouping problem. It's just a problem of filtering out the unwanted elements at each level (those that have ParentIndex != current()/SelfIndex), copying the current element, and then repeating the process for the next level down. On Monday 11 March 2002 07:13, Scherpenzeel, Wim wrote: > I have an XML file (see below) that has a 'flat' structure and I need to > transform it into an hierarchical structure (see below). > > I am trying my best with the Muenchian method etc, but I cannot get it > quite right. > Anybody out there want to give this one a try? > > Thanks > Wim > > -------------------- > Input file: > -------------------- > <Publication> > ? <PublicationElements> > ? ? <ParentIndex>-1</ParentIndex> > ? ? <SelfIndex>0</SelfIndex> > ? ? <LabelTypeName>Volgorde</LabelTypeName> > ? ? <LabelName>Folderflap</LabelName> > ? ? <ElementText> > ? ? </ElementText> > ? </PublicationElements> > ? <PublicationElements> > ? ? <ParentIndex>0</ParentIndex> > ? ? <SelfIndex>1</SelfIndex> > ? ? <LabelTypeName>Volgorde</LabelTypeName> > ? ? <LabelName>frontpage</LabelName> > ? ? <ElementText> > ? ? </ElementText> > ? </PublicationElements> > ? <PublicationElements> > ? ? <ParentIndex>1</ParentIndex> > ? ? <SelfIndex>2</SelfIndex> > ? ? <LabelTypeName>Volgorde</LabelTypeName> > ? ? <LabelName>headerbox</LabelName> > ? ? <ElementText> > ? ? </ElementText> > ? ? <Functions>Pre#F#Box</Functions> > ? </PublicationElements> -- Peter Davis Change the Social Contract? BWAHAHAHAHAHAHAHAHAHAHAHA. -- Branden Robinson XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|