|
Subject: Re: [xsl] Transform flat structure into hierarchy From: Peter Davis <pdavis152@xxxxxxxxx> Date: Mon, 11 Mar 2002 15:47:45 -0800 |
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
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Transform flat structure into, Scherpenzeel, Wim | Thread | RE: [xsl] Transform flat structure , McNally, David |
| RE: [xsl] Date Comparison using ">=, Snow, Corey | Date | RE: [xsl] Date Comparison using ">=, Joshua . Kuswadi |
| Month |