This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: grouping after filtering plus a little more...
- From: Joerg Heinicke <joerg dot heinicke at gmx dot de>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Mon, 08 Jul 2002 23:21:58 +0200
- Subject: Re: [xsl] grouping after filtering plus a little more...
- References: <F3ZMIzD0HWISG8R00qO00005fb2@hotmail.com>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hello Kit,
it's very difficult to follow your explanations. And because nobody
answers your mails, I think, I'm not the only one who has problems with
them.
The problem with
<xsl:apply-template select="book[author='author2']][generate-id() =
generate-id(key('books', type))]"/>
I see is, that your author element consists of a name element and a
gender element, so in the above the first predicate has to be
[author/name='author2'].
But it's not possible that you get the same results like before, you
should get no results, because no book matches the predicate until now.
If this does not solve your problem, try to be more specific in your
problem description. Often it helps to give a part of the XML (like you
did it) and the XSL (not only one <xsl:apply-templates/>).
Using the preceding(-sibling)-axis is only another (less efficient) way
of grouping and should not solve your problems.
Regards,
Joerg
? ?? wrote:
Hi joerg,
thanks for your reply. I have try the solution you've provided however,
it seems to give me the same results as before (i.e. some data can not
be display)... i had a look at the source file, it did not displays some
result because the processor (i am using xalan-c 1.3) already spotted
the data beforehand. (actually i had just spotted a mistake in my
example ... i was suppose to group the type only, given that
author='author2'. So my key should be <xsl:key name="books" match="book"
use="type"/>
)
in my example ...
<book>
<author>
<name>author1</name>
<gender>m</gender>
</author>
<name>x box</name>
<type>sc-fi</type>
</book>
<book>
<author>
<name>author2</name>
<gender>f</gender>
</author> <name>elf story</name>
<type>adventure</type>
</book>
<book>
<author>
<name>author1</name>
<gender>m</gender>
</author>
<name>the return of Dr who</name>
<type>sc-fi</type>
</book>
<book>
<author>
<name>author2</name>
<gender>f</gender>
</author>
<name>something2</name>
<type>sc-fi</type>
</book>
...
say i was looking for all the type of books written by aurthor2, using
the following call the processor will skip the type which it sees before
(e.g. sc-fi will not be shown as it already appears previously for author1)
<xsl:apply-template select="book[author='author2']][generate-id() =
generate-id(key('books', type))]"/>
therefore i was wondering is there a way to overcome this? (as you
suggested) i though by filtering the data first before using the mucheun
method (via multiple predicate) could solve the problem, however, it
seems it doesn't like. please could you give me some advise over this?
furthermore, i was wondering it is possible to use preceding-silbing
axis whilst it requires to match more than one element? for example
using keys you can do this:
<xsl:key name="books" match="book" use="concat(author/name, '::',
author/gender)"/>
and grouping via <xsl:apply-template select="book[generate-id() =
generate-id(key('books', concat(author/name, '::', author/gender)))]"/>
however using preceding axis algorithum
<xsl:for-each select="/book[not(concat(author/name, '::',
author/gender)=preceding-sibling::book/???
i am lost at that point....
please help
Many thanks
Regards Kit
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list