Re: [xsl] xsl transormation from flat tree to hierarchical tree

Subject: Re: [xsl] xsl transormation from flat tree to hierarchical tree
From: Mukul Gandhi <gandhi.mukul@xxxxxxxxx>
Date: Sat, 10 Mar 2012 16:00:47 +0530
Hi Andreas,
    May I propose a solution, which may be a start.

I guess, your area of interest for transformation is following XML
fragment (which is the only place, where I can see the "parent"

    <state name="root" type="CompoundState"/>
    <state name="a" type="SimpleState" parent="root"/>
    <state name="choose" type="DecisionState" parent="root"/>
    <state name="b" type="SimpleState" parent="root"/>
    <state name="c" type="SimpleState" parent="root"/>

So here's my proposal for this transformation,

<!-- starting point -->
<xsl:call-template name="printStateTree">
     <xsl:with-param name="curState" select="state[not(@parent)]"/>

<xsl:template name="printStateTree">
     <xsl:param name="curState"/>

     <xsl:element name="{$curState/@name}"/>
          <xsl:for-each select="//state[@parent = $curState/@name]">
              <xsl:call-template name="printStateTree">
                  <xsl:with-param name="curState" select="."/>

This is not tested. The output format of this XSLT fragment is
unrelated to your actual output (and it is not optimized -- since it
has the expression //state, and output probably not normalized to be a
good tree format). This XSLT fragment only intends to demonstrate the
technique that I had in mind.

Just some food for thought :)

On Sat, Mar 10, 2012 at 1:44 PM, Andreas Volz <lists@xxxxxxxxxxxxx> wrote:
> Am Sat, 3 Mar 2012 11:21:09 +0100 schrieb Andreas Volz:
>> Hello,
>> I've a list with a flat tree that has a parent attribute to save
>> child/father relations.
>> I just like to transform this state machine graph in DotML format to
>> display it as SVG:
>> I've yet a somehow working version:
>> But it has only a flat list and shows transitions between them. I
>> would like to handle CompoundStates as records in DotML. So I need
>> some transformation from my flat tree into that hierarchical tree
>> from DotML record.
>> I've no idea how to do this in xsl. I'm using xsltproc in Ubuntu
>> 11.10:
>> > xsltproc --version
>> Using libxml 20708, libxslt 10126 and libexslt 815
>> xsltproc was compiled against libxml 20708, libxslt 10126 and libexslt
>> 815 libxslt 10126 was compiled against libxml 20708
>> libexslt 815 was compiled against libxml 20708
>> As fas as I know it supports only XSLT 1.0.
>> Could you help me?
> No hints? Did I ask in a wrong way? Or isn't this possible?
> regards
> B  B  B  B Andreas
> --
> Technical Blog <>

Mukul Gandhi

Current Thread