Altova Mailing List Archives>Archive Index >xsl-list Archive Home >Recent entries >Thread Prev - [xsl] Multiple matches against keys? [Thread Next] Re: [xsl] Multiple matches against keys?To: Date: 9/2/2004 2:15:00 AM 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 | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
