|
Subject: Re: [xsl] xsl:key grouping problem From: Mark Ivs <markivs2003@xxxxxxxxx> Date: Wed, 17 Nov 2004 13:06:18 -0800 (PST) |
Thank you for the detialed explanation. It was very
helpful. One last thing. I would like to display my
results in 2 or 3 table columns. The way it is right
now, it will only display one column. Please see xsl
below. Thanks again.
<xsl:key name="groups" match="country"
use="concat(country_group,
@year, @num)"/>
<xsl:template match="myroot">
<table>
<xsl:for-each select="country[generate-id() =
generate-id(key('groups', concat(country_group,
'2004', '2')))]">
<tr><td>
<xsl:value-of select="country_group"/>
</td></tr>
</xsl:for-each>
</table>
</xsl:template>
Thanks again.
Mark
--- David Carlisle <davidc@xxxxxxxxx> wrote:
>
>
> > Using xsl keys seems like a tough concept to
> > understand(atleast for me). Are there other
> novices
>
> keys themselves are simple enough, but using them
> (as here) for grouping
> isn't at all obvious and is normally called (here at
> least) Muenchian
> grouping after Steve Muench who first thought of
> this.
> Jeni's site is the usual reference for a tutorial.
>
> http://www.jenitennison.com/xslt/grouping/index.html
>
> > How does generate-id on country be equal to
> > generate-id on the key? That's where I am
> confused.
> > country[generate-id() = generate-id(key('groups',
> > concat(country_group, '2004', '2'))) ??
>
>
> The trick here is that if you are on a country then
> concat(country_group, '2004', '2')
> is the key string you want to use and so
>
> key('groups', concat(country_group, '2004', '2'))
>
> will return all the nodes that we want to consider
> to be grouped with
> this country.
>
> Now the test is trying to say "is this node the
> first node in this
> group" (if so start processing the group, if not do
> nothing as this node
> was already handled when the rest of the group was
> handled, on the first
> node)
>
> so this node is .
>
> and the first node in the current group is
>
> key('groups', concat(country_group, '2004', '2'))[1]
>
> so you want to know if
>
> . is key('groups', concat(country_group, '2004',
> '2'))[1]
>
> now in XPath 2 (draft) there is an "is" operator
> that tests node
> identity and the above line is actually valid Xpath2
> but in Xpath 1
> there is no operator. You can't "is". You can't use
> use = as
>
>
> . = key('groups', concat(country_group, '2004',
> '2'))[1]
>
> would test if the string value of the current node
> was equal to the
> string value of the first node in the group, which
> isn't what we want.
>
> however generate-id returns a unique string for each
> node so you can say
>
> generate-id(.) = generate-id(key('groups',
> concat(country_group, '2004', '2'))[1])
>
> and that will be true just if the current node is
> the first node in the
> group.
>
> This idiom isn't at all obvious but it is a FAQ and
> when you've seen it
> most days on this list for 5 years you tend to take
> some syntactic
> shortcuts:
>
> generate-id(.)
>
> can be written
>
> generate-id() because . is implied if you supply no
> argument.
>
> generate-id(key('groups', concat(country_group,
> '2004', '2'))[1])
>
> can be written
>
> generate-id(key('groups', concat(country_group,
> '2004', '2')))
>
> because as for most string generating functions in
> XSLT 1, if you supply
> a node set as an argument it will take the first
> node in teh set in
> document order and use that and silently ignore any
> other nodes, in
> other words [1] is implictly applied.
>
> David
>
>
________________________________________________________________________
> This e-mail has been scanned for all viruses by
> Star. 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
>
________________________________________________________________________
>
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] xsl:key grouping problem, David Carlisle | Thread | [xsl] How to display an XML as Exce, Jaime Stuardo |
| Re: [xsl] problem with keys and Meu, Geert Josten | Date | RE: [xsl] problem with keys and Meu, Passin, Tom |
| Month |