[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] re-ordering nodes/partial sort


Subject: Re: [xsl] re-ordering nodes/partial sort
From: "M. David Peterson" <m.david@xxxxxxxxxx>
Date: Sun, 10 Oct 2004 09:38:13 -0700

Hey Kevin,

Does this have to be in document order of the input (or based on an index of some sort) or is this something that can solved simply by using the sort element? Something as simple as this...

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/">
  <supplements>
  <xsl:apply-templates select="supplements/supp">
   <xsl:sort select="supp-desc"/>
  </xsl:apply-templates>
  </supplements>
</xsl:template>

<xsl:template match="supp">
  <xsl:copy-of select="."/>
</xsl:template>

</xsl:stylesheet>

Will give you this...

<?xml version="1.0" encoding="UTF-8"?>
<supplements>
  <supp>
    <supp-desc>Balcony</supp-desc>
    <supp-price>8.00</supp-price>
  </supp>
  <supp>
    <supp-desc>Bed &amp; Breakfast</supp-desc>
    <supp-price>4.00</supp-price>
  </supp>
  <supp>
    <supp-desc>Bed &amp; Breakfast (child)</supp-desc>
    <supp-price>2.00</supp-price>
  </supp>
  <supp>
    <supp-desc>Full Board</supp-desc>
    <supp-price>60.00</supp-price>
  </supp>
  <supp>
    <supp-desc>Full Board (child)</supp-desc>
    <supp-price>30.00</supp-price>
  </supp>
  <supp>
    <supp-desc>Half Board</supp-desc>
    <supp-price>30.00</supp-price>
  </supp>
  <supp>
    <supp-desc>Half Board (child)</supp-desc>
    <supp-price>15.00</supp-price>
  </supp>
  <supp>
    <supp-desc>Sea View</supp-desc>
    <supp-price>10.00</supp-price>
  </supp>
</supplements>

But it seems that you have a requirement to sort based on doc order as well? Let me know if this is sufficient or if you need further help. The indexed solution is pretty straight forward as well but if this works, no need to further complicate the code if you don't have to.

Best regards,

<M:D/>


Kevin Bird wrote:
Hi

In the following structure I can receive 1 or many <supp> nodes. Some of
the <supp> nodes need re-arranging depending on their <supp-desc>. The
order is: Bed &amp; Breakfast, Bed &amp; Breakfast (child), Half Board,
Half Board (child), Full Board and Full Board (child). Any <supp> with a
<supp-desc> that is not one of the above appear before them in the
output.

Any suggestions would be greatly appreciated.

--INPUT--

<supplements>
	<supp>
		<supp-desc>Sea View</supp-desc>
		<supp-price>10.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Half Board</supp-desc>
		<supp-price>30.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Bed &amp; Breakfast</supp-desc>
		<supp-price>4.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Full Board</supp-desc>
		<supp-price>60.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Half Board (child)</supp-desc>
		<supp-price>15.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Full Board (child)</supp-desc>
		<supp-price>30.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Bed &amp; Breakfast (child)</supp-desc>
		<supp-price>2.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Balcony</supp-desc>
		<supp-price>8.00</supp-price>
	</supp>
</supplements>

--REQUIRED OUTPUT--

<supplements>
	<supp>
		<supp-desc>Sea View</supp-desc>
		<supp-price>10.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Balcony</supp-desc>
		<supp-price>8.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Bed &amp; Breakfast</supp-desc>
		<supp-price>4.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Bed &amp; Breakfast (child)</supp-desc>
		<supp-price>2.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Half Board</supp-desc>
		<supp-price>30.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Half Board (child)</supp-desc>
		<supp-price>15.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Full Board</supp-desc>
		<supp-price>60.00</supp-price>
	</supp>
	<supp>
		<supp-desc>Full Board (child)</supp-desc>
		<supp-price>30.00</supp-price>
	</supp>
</supplements>

Thanks.

--
Kevin


Current Thread