|
Subject: RE: apples into baskets From: Kay Michael <Michael.Kay@xxxxxxx> Date: Fri, 2 Jun 2000 09:31:27 +0100 |
> What I am trying to do is to put fruits into baskets:
>
> INPUT:
>
> <basket/>
> <apples>3</apples>
> <oranges>5</oranges>
> <basket/>
> <apples>7</apples>
> <oranges>9</oranges>
>
This falls into the broad category of grouping problems: see Dave Pawson's
FAQ. The most general solutions involve using a recursive named template to
process the list on element at a time. In this case I suspect something
along the following lines might work:
<xsl:template match="basket">
<basket>
<xsl:apply-templates
select="following-sibling::*[
generate-id(preceding-sibling::basket[1])=
generate-id(current())]"/>
</basket>
</xsl:template>
In other words, for each <basket> element, process those of its
following-siblings that have that <basket> as their most recent <basket>
preceding-sibling.
It is of course horribly inefficient (order n squared) for a long list. So a
Muenchian solution using keys would be better:
<xsl:key name="bkey"
match="apples|oranges|bananas"
use="generate-id(preceding-sibling::basket[1])"/>
<xsl:template match="basket">
<xsl:apply-templates select="key('bkey', generate-id())"/>
</xsl:template>
Mike Kay
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| apples into baskets, Evgenii Bazarov | Thread | RE: text output literal text, Kay Michael |
| RE: text output literal text, Kay Michael | Date | Re: ANN: Maintenance 4xt, Sebastian Rahtz |
| Month |