xsl-list
[Top] [All Lists]

Re: xsl sort query

2003-08-29 10:50:19
Have a look at the XSL-FAQ -- this section should contain the answer to your
question:

http://dpawson.co.uk/xsl/sect2/N6461.html



=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL



"Cormac Fiddes" <Cormac(_dot_)Fiddes(_at_)VHI(_dot_)IE> wrote in message
news:F240IFW3FPUO*/R=A1/R=PROSYS/U=FIDDES_C/@MHS...

Hi,
I have the following stylesheet & xml data and I need to dynamically sort
the
data coming from the xml file.

There is a need to sort on 'if' basis, i.e.  a value(CFIndica) coming from
the
xml file within a different group(HEADINGS) determines the sort. I.E.

I need to sort by
when CFIndica = 1 then sort by cfnumber ascending
when CFIndica = 2 then sort by cfsurname ascending
when CFIndica = 3 then sort by cfcentre ascending.
AND to allow a default of 'NO' sort, i.e CFIndica might be = 4 or just
have a
default of no sort.(perhaps just not apply CFIndica of 1 to 3?).

I had thought it would be something like this, but sadly no effect.
The xml data is like this,


 <GROUP_MEMBER_DETAILS>
         <CFNumber>18888</CFNumber>
         <CFTitle>Mr</CFTitle>
         <CFFirstName>Cormac</CFFirstName>
         <CFSurname>GGGGGG</CFSurname>
         <CFIden>XX999</CFIden>
         <CFCentre>1122</CFCentre>
         <CFProd>Plan B</CFProd>
         <CFCov>Hsteps</CFCov>
         <CFAdu>6</CFAdu>
         <Students>5</Students>
         <Children>7</Children>
         <Status>A</Status>
      </GROUP_MEMBER_DETAILS>

      <GROUP_MEMBER_DETAILS>
         <CFNumber>12345</CFNumber>
         <CFTitle>Mr</CFTitle>
         <CFFirstName>Cormac</CFFirstName>
         <CFSurname>AAAAAA</CFSurname>
         <CFIden>XX999</CFIden>
         <CFCentre>1122</CFCentre>
         <CFProd>Plan B</CFProd>
         <CFCov>Hsteps</CFCov>
         <CFAdu>6</CFAdu>
         <Students>5</Students>
         <Children>7</Children>
         <Status>A</Status>
      </GROUP_MEMBER_DETAILS>

      <GROUP_MEMBER_DETAILS>
         <CFNumber>14444</CFNumber>
         <CFTitle>Mr</CFTitle>
         <CFFirstName>Cormac</CFFirstName>
         <CFSurname>CCCCCC</CFSurname>
         <CFIden>XX999</CFIden>
         <CFCentre>1122</CFCentre>
         <CFProd>Plan B</CFProd>
         <CFCov>Hsteps</CFCov>
         <CFAdu>6</CFAdu>
         <Students>5</Students>
         <Children>7</Children>
         <Status>A</Status>
      </GROUP_MEMBER_DETAILS>

      <GROUP_MEMBER_DETAILS>
         <CFNumber>16666</CFNumber>
         <CFTitle>Mr</CFTitle>
         <CFFirstName>Cormac</CFFirstName>
         <CFSurname>EEEEEE</CFSurname>
         <CFIden>XX999</CFIden>
         <CFCentre>1122</CFCentre>
         <CFProd>Plan B</CFProd>
         <CFCov>Hsteps</CFCov>
         <CFAdu>6</CFAdu>
         <Students>5</Students>
         <Children>7</Children>
         <Status>A</Status>
      </GROUP_MEMBER_DETAILS>

      <GROUP_MEMBER_DETAILS>
         <CFNumber>15555</CFNumber>
         <CFTitle>Mr</CFTitle>
         <CFFirstName>Cormac</CFFirstName>
         <CFSurname>DDDDDD</CFSurname>
         <CFIden>XX999</CFIden>
         <CFCentre>1122</CFCentre>
         <CFProd>Plan B</CFProd>
         <CFCov>Hsteps</CFCov>
         <CFAdu>6</CFAdu>
         <Students>5</Students>
         <Children>7</Children>
         <Status>A</Status>
      </GROUP_MEMBER_DETAILS>

      <GROUP_MEMBER_DETAILS>
         <CFNumber>19999</CFNumber>
         <CFTitle>Mr</CFTitle>
         <CFFirstName>Cormac</CFFirstName>
         <CFSurname>HHHHHH</CFSurname>
         <CFIden>XX999</CFIden>
         <CFCentre>1122</CFCentre>
         <CFProd>Plan B</CFProd>
         <CFCov>Hsteps</CFCov>
         <CFAdu>6</CFAdu>
         <CFStu>5</CFStu>
         <CFChi>7</CFChi>
         <CFSta>A</CFSta>
      </GROUP_MEMBER_DETAILS>

I need to sort by
when CFIndica = 1 then sort by cfnumber ascending
when CFIndica = 2 then sort by cfsurname ascending
when CFIndica = 3 then sort by cfcentre ascending.
AND to allow a default of 'NO' sort, i.e CFIndica might be = 4 or just
have a
default of no sort.(perhaps just not apply CFIndica of 1 to 3?).

I had thought the xsl would be like:

<!--
Define sorting in details
-->
<xsl:template match="CF_DETAILS">
<xsl:variable name="CFOption">
<xsl:value-of select="string(HEADINGS//CFIndica)"/>
</xsl:variable>
<xsl:if test="$CFOption=1">
<xsl:apply-templates>
<xsl:sort select="CFNumber" order="ascending"
data-type="number"/>
</xsl:apply-templates>
</xsl:if>
<xsl:if test="$CFOption=2">
<xsl:apply-templates>
<xsl:sort select="CFSurname" order="ascending"
data-type="number"/>
</xsl:apply-templates>
</xsl:if>
<xsl:if test="$CFOption=3">
<xsl:apply-templates>
<xsl:sort select="CFCentre" order="ascending"
data-type="number"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>

<!--
Define the elements that are required within the block CF_DETAILS
-->
<xsl:template match="CF_DETAILS">
  <CF_DETAILS>
<xsl:call-template name="G_CF_DETAILS"/>
<xsl:apply-templates select="descendant::CFNumber"/>
<xsl:apply-templates select="descendant::CFTitle"/>
<xsl:apply-templates select="descendant::CFFirstname"/>
<xsl:apply-templates select="descendant::CFSurname"/>
<xsl:apply-templates select="descendant::CFIden"/>
<xsl:apply-templates select="descendant::CFCentre"/>
<xsl:apply-templates select="descendant::CFProd"/>
<xsl:apply-templates select="descendant::CFCov"/>
<xsl:apply-templates select="descendant::CFStu"/>
<xsl:apply-templates select="descendant::CFStu"/>
<xsl:apply-templates select="descendant::CFStu"/>
  </CF_DETAILS>
</xsl:template>

<!--
call template CF_DETAILS
-->

<xsl:template name="G_CF_DETAILS">
<xsl:element name="CF_DETAILS">
  <xsl:attribute name="xfa:dataNode">dataGroup</xsl:attribute>
  <xsl:text>begin</xsl:text>
</xsl:element>
</xsl:template>

Please help out, as this is really bugging me!

cheers
Cormac

Cormac Fiddes,
Software Development,
Abbey St.

Ext: 4386

Direct Line: 01-7994009

E-Mail : Cormac(_dot_)Fiddes(_at_)VHI(_dot_)IE

http://www.vhihealthe.com
http://www.vhihealthcare.com
_____________________________

************************************************************
This e-mail and any files transmitted with it contain information which
may be
confidential and which may also be privileged and is intended solely for
the
use of the individual or entity to whom it is addressed.  Unless you are
the
intended recipient you may not copy or use it, or disclose it to anyone
else.
Any opinions expressed are that of the individual and not necessarily that
of
Vhi Healthcare. If you have received this e-mail in error please notify
the
sender by return. This footnote also confirms that this e-mail message has
been
Swept for the presence of computer viruses.



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list






 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>