Re: [xsl] Creating Hierarchy

Subject: Re: [xsl] Creating Hierarchy
From: "Rowan Sylvester-Bradley" <rowan@xxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 17 Oct 2008 13:47:13 +0100
You'll find a description of an XSLT 2.0 stylesheet that does this (and some
other things besides) at


http://www.idealliance.org/proceedings/xml04/papers/111/mhk-paper.html

Michael Kay
http://www.saxonica.com/


Thanks to Michael and Ken for your replies. I've now got it more or less working using xsl:for-each-group. However, I've got another problem that I can't quite work out. Each of the main elements in the result file needs to have a unique ID attribute. So if my source file is:


<mytree>
  <node>
    <name>Root of my tree</name>
    <level>0</level>
  </node>
  <node>
    <name>Child of root</name>
    <level>1</level>
  </node>
  <node>
    <name>Another child of root</name>
    <level>1</level>
  </node>
  <node>
    <name>Grandchild of root</name>
    <level>2</level>
  </node>
  <node>
    <name>Yet another child of root</name>
    <level>1</level>
  </node>
</mytree>

I want to transform this into this:

<newnode id="1">
  <name>Root of my tree</name>
  <newnode id="2">
    <name>Child of root</name>
  </newnode>
  <newnode id="3">
    <name>Another child of root</name>
    <newnode id="4">
      <name>Grandchild of root</name>
    </newnode>
  </newnode>
  <newnode id="5">
    <name>Yet another child of root</name>
  </newnode>
</newnode>

I.e. the id attributes just keep incrementing regardless of the hierarchy.

How do I generate the values of these id attributes?

Thanks - Rowan

Current Thread