xsl-list
[Top] [All Lists]

grouping for-each

2003-11-05 04:41:43
I thought i might add an test example because i think it may help me to understand it a bit better:
<viewentries>
<viewentry><entrydata><text>ghe</text></entrydata></viewentry>
<viewentry><entrydata><text>aggj</text></entrydata></viewentry>
<viewentry><entrydata><text>bab</text></entrydata></viewentry>
<viewentry><entrydata><text>corry</text></entrydata></viewentry>
<viewentry><entrydata><text>curry</text></entrydata></viewentry>
<viewentry><entrydata><text>don</text></entrydata></viewentry>
<viewentry><entrydata><text>din</text></entrydata></viewentry>
<viewentry><entrydata><text>eat</text></entrydata></viewentry>
<viewentry><entrydata><text>carry</text></entrydata></viewentry>
<viewentry><entrydata><text>edd</text></entrydata></viewentry>
<viewentry><entrydata><text>abbl</text></entrydata></viewentry>
<viewentry><entrydata><text>ebdads</text></entrydata></viewentry>
<viewentry><entrydata><text>ettf</text></entrydata></viewentry>
<viewentry><entrydata><text>full</text></entrydata></viewentry>
<viewentry><entrydata><text>geik</text></entrydata></viewentry>
</viewentries>

<xsl:key name="ve-by-firstocc" match="viewentry" use="substring(entrydata/text,1,1)" />
<xsl:template match="viewentries">
<xsl:for-each select="viewentry[count(. | key('ve-by-firstocc', substring(entrydata/text,1,1))[1]) = 1]"> <xsl:sort select="substring(entrydata/text,1,1)" data-type="text" order="ascending"/> <xsl:variable name="firstletter" select="substring(entrydata/text,1,1)" />
                <xsl:value-of select="substring(entrydata/text,1,1)"/>
<xsl:for-each select="key('ve-by-firstocc', substring(entrydata/text,1,1))">
                        <xsl:sort select="entrydata/text" data-type="text" 
order="ascending"/>
                <xsl:value-of select="entrydata/text" />
                </xsl:for-each>
        </xsl:for-each>
</xsl:template>

how would it loop through the viewentries for bothe for each staements?


From: "james walker" <jameswalkerandy(_at_)hotmail(_dot_)com>
Reply-To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Interpretaion of grouping for-each
Date: Tue, 04 Nov 2003 10:24:03 +0000

What does count() =1 represent (got a bit confused about jeni's explanation)
"and
count(. | .....) =1
id the currently selected viewdata is that first element.
so
"
Just to be clear, am i right in saying that "viewentry{key('ve-by-firstocc', substring(entrydata[3]/text,1,1))[1]]" selects the first of each group of viewentries with the same key (including groups which only have one viewentry in it)?


From: David Carlisle <davidc(_at_)nag(_dot_)co(_dot_)uk>
Reply-To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Interpretaion of grouping for-each
Date: Mon, 3 Nov 2003 17:02:29 GMT

> Does it go through viewentries which have dont have repeat key values?

No it selects the first (in document order) viewentry with each key
value (even if that key value is not repeated).

See any description of muenchian grouping, eg Jeni's site.

<xsl:for-each select="viewentry
that selects all viewentries then
key('ve-by-firstocc', substring(entrydata[3]/text,1,1))
selects al the entries with the same key,
so
key('ve-by-firstocc', substring(entrydata[3]/text,1,1))[1]
selects the first of that group
and
count(. | .....) =1
id the currently selected viewdata is that first element.
so
viewentry[....]
just selects the first entry in each group as teh predicate is false in
other case.

David

--
http://www.dcarlisle.demon.co.uk/matthew

________________________________________________________________________
This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


_________________________________________________________________
Use MSN Messenger to send music and pics to your friends http://www.msn.co.uk/messenger


XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


_________________________________________________________________
It's fast, it's easy and it's free. Get MSN Messenger today! http://www.msn.co.uk/messenger


XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


_________________________________________________________________
Express yourself with cool emoticons - download MSN Messenger today! http://www.msn.co.uk/messenger


XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>
  • grouping for-each, james walker <=