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

Subject: [xsl] Grouping adjacent elements by value - within a range
From: Kevin Bird <kevin.bird@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 13 Aug 2010 10:35:59 +0100
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