You could use the distinct function if libxslt supports it to first get the
list of distinct context elements sorted on the context element and then for
each context element, do what you are doing.
<!- iterate over each distinct context in sorted order ->
<xsl:for-each select="distinct(//context)">
<xsl:sort select="."/>
<xsl:variable name="contextVal" select="."/>
<li>
CONTEXT: <xsl:value-of select="$contextVal"/>: (<xsl:value-of
select="count(key('tasks-by-context',$contextVal))"/> tasks)
</li>
<ul>
<xsl:for-each select="key('tasks-by-context', $contextVal)">
<li>
Task : <xsl:value-of select="subject"/>
</li>
</xsl:for-each>
</ul>
</xsl:for-each>
-Vasu
-----Original Message-----
From: Ramon M. Felciano @ Yahoo [mailto:felciano(_at_)yahoo(_dot_)com]
Sent: Wednesday, September 01, 2004 7:15 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Multiple matches against keys?
Kevin Jones wrote:
So it looks like my key definition is no longer picking up "call" as a
valid key item. I'm actually not sure whether I'm using the <xsl:key>
tag correctly here -- will it match and index a single <task> node
multiple times if it contains multiple tags?
I think your problem is that you are passing a nodeset to the key call so that
it retruns results from different 'context' sets. This means you can't use
the count(.|key(...)[1])=1 trick to isolate the first from a particular
'context'. One way to fix is is to loop both over the 'task' and then the
child 'context' elements and apply the same test. Something like this should
work,
<xsl:for-each select="/tasks/task">
<xsl:sort select="subject"/>
<xsl:for-each select="context">
<xsl:if test="count((..|key('tasks-by-context',.)[1]))=1">
<li>
CONTEXT: <xsl:value-of select="."/>: (<xsl:value-of
select="count(key('tasks-by-context',.))"/> tasks)
</li>
<ul>
<xsl:for-each select="key('tasks-by-context', .)">
<li>
Task : <xsl:value-of select="subject"/>
</li>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
Kev.
Hi Kev --
This is almost right -- it gives me the right grouping, but the sort
order is wrong. How can I get that outer loop to sort the contexts
alphabetically? Do I need to make the outer loop iterate over the sorted
contexts first?
Thanks!
Ramon
--+------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--
----+----
This email message (and any attached document) contains information from
Ingenuity Systems Inc. which may be considered confidential by Ingenuity, or
which may be privileged or otherwise exempt from disclosure under law, and is
for the sole use of the individual or entity to whom it is addressed. Any
other dissemination, distribution or copying of this message is strictly
prohibited. If you receive this message in error, please notify me and destroy
the attached message (and all attached documents) immediately.