|
Subject: Re: [xsl] Create xml file with recursive childnodes From: chun ji <cji_work@xxxxxxxxx> Date: Wed, 13 Aug 2008 14:03:37 -0700 (PDT) |
Hi Mukul,
thank you for 2 solutions. But I see an issue for the
second one if the root obj has more that 1 child.
For example, if the input xml is :
"
<Objs>
<obj name="a" child="b"/>
<obj name="b" child="c"/>
<obj name="b" child="d"/>
<obj name="c" child="e"/>
<obj name="b" child="f"/>
<obj name="a" child="u"/>
</Objs>
"
, I get such results
"
<?xml version="1.0" encoding="UTF-8"?>
<Obj name="a a">
<Obj name="b">
<Obj name="c">
<Obj name="e"/>
</Obj>
<Obj name="d"/>
<Obj name="f"/>
</Obj>
</Obj>
".
Regards,
Chun
--- Mukul Gandhi <gandhi.mukul@xxxxxxxxx> wrote:
> Here is a slightly better solution.
>
> <xsl:stylesheet
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="2.0">
>
> <xsl:output method="xml" indent="yes" />
>
> <xsl:template match="Objs">
> <xsl:variable name="start" select="obj[not(@name =
> ../obj/@child)]" />
> <Obj name="{$start/@name}">
> <xsl:choose>
> <xsl:when test="not(obj[@name =
> $start/@child])">
> <Obj name="{$start/@child}" />
> </xsl:when>
> <xsl:otherwise>
> <xsl:call-template name="performGrouping">
> <xsl:with-param name="list"
> select="obj[@name = $start/@child]" />
> </xsl:call-template>
> </xsl:otherwise>
> </xsl:choose>
> </Obj>
> </xsl:template>
>
> <xsl:template name="performGrouping">
> <xsl:param name="list" />
>
> <xsl:for-each-group select="$list"
> group-by="@name">
> <Obj name="{current-grouping-key()}">
> <xsl:for-each select="current-group()">
> <xsl:variable name="child" select="@child"
> />
> <xsl:choose>
> <xsl:when test="not(../obj[@name =
> $child])">
> <Obj name="{$child}" />
> </xsl:when>
> <xsl:otherwise>
> <xsl:call-template
> name="performGrouping">
> <xsl:with-param name="list" select="../obj[@name =
> $child]" />
> </xsl:call-template>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:for-each>
> </Obj>
> </xsl:for-each-group>
> </xsl:template>
>
> </xsl:stylesheet>
>
> The stylesheet I earlier posted did execution in two
> pass. This one
> does the whole processing in a single pass.
>
> On Sat, Aug 9, 2008 at 10:44 AM, Mukul Gandhi
> <gandhi.mukul@xxxxxxxxx> wrote:
> > The following stylesheet works ...
>
> --
> Regards,
> Mukul Gandhi
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] Create xml file with recu, Bordeman, Chris | Thread | Re: [xsl] Create xml file with recu, Mukul Gandhi |
| RE: [xsl] Sorting, but then splitti, Michael Kay | Date | Re: [xsl] Create xml file with recu, Mukul Gandhi |
| Month |