[xsl] algorithm for this hierarchy, anyone?

Subject: [xsl] algorithm for this hierarchy, anyone?
From: "Ruggier, Mario" <Mario.Ruggier@xxxxxxxxxxxxxxxx>
Date: Mon, 4 Feb 2002 12:02:09 +0100
Hello, 

I would like to convert the list of <obj> elements to 
the hierarchical XML output, as below, but am having 
problems identifying a workable algorithm. Can anyone 
suggest a simplest (or so ;-) algorithm for this? 

Mario Ruggier 
--
SoftPlumbers SA, 26 rue Maunoir, CH-1207 Genève
Mobile +41.79.240.8636 | Office +41.22.849.1038


===================================
Input XML 
(<obj> elements may occur in any order)
("destination" depth of an <obj> is determined by the 
value of p.array/@size, and which could be anything)
(no level jumps -- if there is a p.array[@size=n], then 
there will always be all intermediate occurances of 
p.array[size = n-1 ... 1 ], which will be composed of 
the corresponding number of "bottom" elements of p.array)

<r>
 <obj>
   <p.array size="1">
     <v>en</v>     
   </p.array>
 </obj>
  <obj>
   <p.array size="1">
     <v>it</v>     
   </p.array>
 </obj>
 <obj>
   <p.array size="1">
     <v>fr</v>     
   </p.array>
 </obj>
 <obj>
   <p.array size="2">
     <v>one</v>
     <v>en</v>     
   </p.array>
 </obj>
 <obj>
   <p.array size="2">
     <v>uno</v>
     <v>it</v>     
   </p.array>
 </obj>
  <obj>
   <p.array size="2">
     <v>un</v>
     <v>fr</v>     
   </p.array>
 </obj>
 <obj>
   <p.array size="3">
     <v>two</v>
     <v>one</v>
     <v>en</v>     
   </p.array>
 </obj>
 <obj>
   <p.array size="3">
     <v>due</v>
     <v>uno</v>
     <v>it</v>     
   </p.array>
 </obj>
 <obj>
   <p.array size="3">
     <v>doo</v>
     <v>un</v>
     <v>fr</v>     
   </p.array>
 </obj>
 <obj>
   <p.array size="4">
     <v>trois</v>
     <v>doo</v>
     <v>un</v>     
     <v>fr</v> 
   </p.array>
 </obj>
</r>

===================================
Desired Output 
(order of sibling <obj> elements is not important):

<r>
  <obj name="en">
    <obj name="one">
      <obj name="two" />
    </obj>
  </obj>
  <obj name="fr">
    <obj name="un">
      <obj name="doo">
        <obj name="trois"/>
      </obj>
    </obj>
  </obj>
  <obj name="it">
    <obj name="uno">
      <obj name="due" />
    </obj>
  </obj>
</r>

===================================



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


Current Thread