RE: [xsl] Grouping adjacent elements by value - within a range

Subject: RE: [xsl] Grouping adjacent elements by value - within a range
From: Kevin Bird <kevin.bird@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 13 Aug 2010 15:23:21 +0100
Dear Michael

Thanks for the reply and advice.

--
Kevin


> -----Original Message-----
> From: Michael Kay [mailto:mike@xxxxxxxxxxxx]
> Sent: 13 August 2010 12:53
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Grouping adjacent elements by value - within a range
>
>
> It's not clear to me whether a period goes in the same group as the
> previous element if (a) its price is within #20 of the price of the
> previous period, or (b) its price is within #20 of the price of the
> first period in the group, or (c) its price is within #20 of every
> other
> period within the group. Assuming (c) which seems the most plausible, I
> think you need to do this by sibling recursion rather than by
> xsl:for-each-group. Here's an example of the idea, there are plenty of
> others you can find by googling:
>
> http://internal.rhaptos.org/devblog/cbearden/2009.07.12-2010
>
> The difference is how to test whether the next item belongs in the same
> group: typically you'll pass along parameters containing the minimum
> and
> maximum price of items in the group, and either add the next item to
> the
> group or start a new group depending how the price of the next item
> compares with these two values.
>
> Michael Kay
> Saxonica
>
>
>
> On 13/08/2010 10:35, Kevin Bird wrote:
> > Hello
> >
> > I typeset price tables for Tour Operators brochures. Due to design
> changes, the space left to display price information has been reduced.
> I need to group adjacent<price>  elements that are within a certain
> range (the range would be passed as a parameter). Once the price
> groupings are worked out, I then need to modify the
> corresponding<period>  elements.
> >
> > The example below shows adjacent price elements grouped that are
> within a range of #20 (with the lowest price returned). Using the same
> groupings, the<period>  elements are modified by taking the
> first<startdate>  and last<enddate>.
> >
> > I can use XSLT 2.0.
> >
> >
> > =========================
> > SOURCE XML
> > =========================
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <grid>
> > 	<row id="periods">
> > 		<period>
> > 			<startdate>01-Sep-2010</startdate>
> > 			<enddate>19-Sep-2010</enddate>
> > 		</period>
> > 		<period>
> > 			<startdate>20-Sep-2010</startdate>
> > 			<enddate>25-Sep-2010</enddate>
> > 		</period>
> > 		<period>
> > 			<startdate>26-Sep-2010</startdate>
> > 			<enddate>30-Sep-2010</enddate>
> > 		</period>
> > 		<period>
> > 			<startdate>01-Oct-2010</startdate>
> > 			<enddate>11-Oct-2010</enddate>
> > 		</period>
> > 		<period>
> > 			<startdate>12-Oct-2010</startdate>
> > 			<enddate>31-Oct-2010</enddate>
> > 		</period>
> > 	</row>
> > 	<row id="prices">
> > 		<price>1209</price>
> > 		<price>1109</price>
> > 		<price>1129</price>
> > 		<price>1359</price>
> > 		<price>1369</price>
> > 	</row>
> > </grid>
> >
> >
> > =========================
> > RESULT XML
> > =========================
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <grid>
> > 	<row id="periods">
> > 		<period>
> > 			<startdate>01-Sep-2010</startdate>
> > 			<enddate>19-Sep-2010</enddate>
> > 		</period>
> > 		<period>
> > 			<startdate>20-Sep-2010</startdate>
> > 			<enddate>30-Sep-2010</enddate>
> > 		</period>
> > 		<period>
> > 			<startdate>01-Oct-2010</startdate>
> > 			<enddate>31-Oct-2010</enddate>
> > 		</period>
> > 	</row>
> > 	<row id="prices">
> > 		<price>1209</price>
> > 		<price>1109</price>
> > 		<price>1359</price>
> > 	</row>
> > </grid>
> >
> >
> > Any help greatly appreciated.
> >
> > --
> > Kevin

Current Thread