Using <xsl:number>

Subject: Using <xsl:number>
From: David Buddrige <dbuddrige@xxxxxxxxx>
Date: Tue, 8 Jun 2004 21:54:56 -0700 (PDT)
Hi all,

I am trying to figure out how to use the <xsl:number>
tag in the following way:


I have a set of recursively heirarchically structured
tags called "Scopes", in the following xml:


<Data>
	<Scope id="1">
		<Scope id="2"/>
		<Scope id="3"/>
	</Scope>
	<Scope id="4">
		<Scope id="5">
			<Scope id="6"/>
			<Scope id="7"/>
		</Scope>
		<Scope id="8">
			<Scope id="9">
				<Scope id="10"/>
				<Scope id="11"/>
			</Scope>
			<Scope id="12"/>
		</Scope>
	</Scope>
	<Scope id="13"/>
</Data>

What I want to do is add a sort-order property to each
Scope tag, which identifies its relative position at
each level of the heirarchy among its peers only. 
That is to say, the sort-order tag should be added
like this:

<Data>
	<Scope id="1" sort-order="1">
		<Scope id="2" sort-order="1"/>
		<Scope id="3" sort-order="2"/>
	</Scope>
	<Scope id="4" sort-order="2">
		<Scope id="5" sort-order="1">
			<Scope id="6" sort-order="1"/>
			<Scope id="7" sort-order="2"/>
		</Scope>
		<Scope id="8" sort-order="2">
			<Scope id="9" sort-order="1">
				<Scope id="10" sort-order="1"/>
				<Scope id="11" sort-order="2"/>
			</Scope>
			<Scope id="12" sort-order="2"/>
		</Scope>
	</Scope>
	<Scope id="13" sort-order="3"/>
</Data>

So that, as you can see, the sort-order is counted at
one level only of the recursive structure.  If there
is a sub-tree coming from a given scope, then the
children are numbered starting at 1 at that direct
decentant level only...

To do this, I have been trying to use the <xsl:number>
tag to insert a new attribute to my xml in the
following way:


<xsl:attribute name=\"sort_order\">";
  <xsl:number level=\"single\" from=\"Scope\"/>";
</xsl:attribute>";

My problem is the "from" attribute... I am reading the
"XSLT Programmers Reference" by  Michael Kay, and the
description for the "from" attribute of the
<xsl:number> tag says that the from field "Determines
a cut-off point, a point in the document from which
sequence numbering starts fresh".

Subsequently, since I want to start numbering fresh
whenever a new subtree begins, I was trying to use
"Scope" as the identifier for the next tag that would
reset numbering...

this does not work however - I always seem to get a
sort-order that is consecutively numbered from the
first element to the last ignoring the recursive
structure of scope tags.

Can anyone help me out with how you go about matching
against any *child* scopes, so that all *child* scopes
reset the numbering, but any sibling scopes are
numbered consecutively?

thanks heaps guys

David.




	
		
__________________________________
Do you Yahoo!?
Friends.  Fun.  Try the all-new Yahoo! Messenger.
http://messenger.yahoo.com/ 

Current Thread