xsl-list
[Top] [All Lists]

RE: converting flat xml data into heirarchy structure

2004-02-09 04:29:48
The general solution to this requirement is to use xsl:apply-templates
to walk the tree recursively as you would normally do, but instead of
selecting the physical children of a node, select the logical children,
which you can do using

../scope[(_at_)parent-id = current()/@id]

Michael Kay

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
David Buddrige
Sent: 09 February 2004 09:18
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] converting flat xml data into heirarchy structure 


Hi all,

I have a source document that is currently being
generated from an Oracle database - it is effectively
a table dump in xml format of the "scope" table..  It
has the following structure.

<scopes>
  <scope id="1" parent_id="0" details="some data"/>
  <scope id="2" parent_id="1" details="more data"/>
  <scope id="3" parent_id="1" details="info"/>
  <scope id="4" parent_id="2" details="blah"/>
  <scope id="5" parent_id="1" details="foo"/>
  <scope id="6" parent_id="2" details="log"/>
  <scope id="7" parent_id="4" details="ogg"/>
  <scope id="8" parent_id="4" details="abcd"/>
  <scope id="9" parent_id="2" details="xyz"/>
</scopes>

What I want to do is to re-organise this data so that
the xml properly represents its structure.  It forms a
tree using the parent_id to identify the parent scope
in a tree structure.

What I want to wind up with from the above data is
this:


<scopes>
 <scope id="1" parent_id="0" details="some data"/>
 <scopes>
  <scope id="2" parent_id="1" details="more data"/>
   <scopes>
    <scope id="4" parent_id="2" details="blah"/>
     <scopes>
      <scope id="7" parent_id="4" details="ogg"/>
      <scope id="8" parent_id="4" details="abcd"/>
     </scopes>
    <scope id="6" parent_id="2" details="log"/>
    <scope id="9" parent_id="2" details="xyz"/>
   </scopes>
  <scope id="3" parent_id="1" details="info"/>
  <scope id="5" parent_id="1" details="foo"/>
 </scopes>
</scopes>

Where each <scope> record has an associated <scopes>
that lists each of the <scope>
records that are related to the first scope as a
child/parent in the following format:


<scope>
  <scopes>
    ...list of child scopes here...
  </scopes>


I have been trying to fathom how to go about this,
mucking around with parameters, trying to write some
kind of recursive routine that will automatically sort
the scope records into this format, but thus far have
not been successful.  Could anyone give any hints as
to how I would go about this?

thanks heaps

David Buddrige



__________________________________
Do you Yahoo!?
Yahoo! Finance: Get your refund fast by filing online. 
http://taxes.yahoo.com/filing.html

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list