I wouldn't do this by recursion. I would do
<xsl:for-each select="StoryBody">
<xsl:sort select="Priority" data-type="number"/>
<xsl:if test="position() < 4">
...
It's possible your recursive approach could be faster, depending on the
data. You can make it work by supplying two parameters on the recursive
call, (a) the next Priority to be output, and (b) the number of items
output so far.
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
-----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
Alex Dragowski
Sent: 23 February 2003 18:59
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Looping on a set value
Greetings. I hope folks can give me some direction. I'm
trying to loop nodes
on a set number, after perfroming a sort. I have the
follwoing example:
<!-- XML source -->
<stories>
<StoryBody>
<Priority>4</ Priority >
<name>My name</name>
<content>Some content</content>
</ StoryBody >
<StoryBody>
<Priority>2</ Priority >
<name>My name</name>
<content>Some content</content>
</ StoryBody >
<StoryBody>
< Priority >6</ Priority >
<name>Your name</name>
<content>Some content</content>
</StoryBody>
<StoryBody>
< Priority >4</ Priority >
<name>Her name</name>
<content>Some content</content>
</StoryBody>
<StoryBody>
< Priority >1</ Priority >
<name>His name</name>
<content>Some content</content>
</StoryBody>
<!-- More Content -->
</stories>
I'd like to sort by <Priority> but only output a set number
of results (in
this case, nodes for StoryBody 1, 2 and only the first 4, not
the second).
I'm having trouble with this. The following gives me my
Priority sort but
matches by Priority number, not by the first 3 nodes of the
tree which is
what I?m after (Displays only StoryBody for Priority(s) 1&2,
although I want
to output 3 nodes (StoryPriority for Priority 1,2 &4):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<table bgcolor="#ffffff" border="0" cellpadding="2" cellspacing="2"
width="450">
<xsl:call-template name="displayitems"/>
</table>
</xsl:template>
<xsl:template name="displayitems">
<xsl:param name="index" select="1"/>
<xsl:for-each select="stories/StoryBody[Priority=$index]">
<tr>
<td>
<!--Content -->
</td>
</tr>
</xsl:for-each>
<!?Here?s where I run into problems à
<xsl:if test="$index < 3">
<xsl:call-template name="displayitems">
<xsl:with-param name="index" select="$index + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
I know the problem is in my test, and that I need a param, or
variable, and
be recursive by position() but I can?t work it out. If I can
keep track and
test for my current node list I?ll be ok.
Any help would be appreciated.
Thanks
_________________________________________________________________
The new MSN 8: advanced junk mail protection and 2 months FREE*
http://join.msn.com/?page=features/junkmail
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list