Saludos Americo!
You are god-like, thank you for the help. I'm a newbie to XSL, still
picking up my syntax
and the finer points of all these bits. I was twisting off on this for a
couple of days.
That's how I learn, but had to send up a flare so my boss wouldn't think I
had atrophied.
Where ya from? Lemme know if I can ever help you..
chao & gracias nuevas,
Bruce
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of
Américo
Albuquerque
Sent: Wednesday, August 13, 2003 6:00 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] xsl:sort question: sorting element based upon
particular child node
Hi.
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
Bruce Rojas-Rennke
Sent: Wednesday, August 13, 2003 10:59 PM
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] xsl:sort question: sorting element based upon
particular child node
Hello all,
I have a sorting prb, - I have to put all the 'ColData'
elements for each 'DataRow' into a row like so...
2003-07-01 70103 AMS Courier 2003-08-15 0 27.50
2003-07-23 29190087 Aegis Staffing 2003-08-22 0 260.00
2003-00-01 93 Boulder CC 2003-09-01 0 70.00
2003-05-13 70103 Yellow Book USA 2003-06-12 0 285.00
In short, I have to spit out all the 'DataRows''ColData' elements,
- sorted upon the '@value' attribute of only those ColData
elements which have an '@colID' = '4'.
Or put another way, I have to sort on element(DataRow) and
it's child nodes(all named ColData), by evaluating one
attribute(ColData/@value) based upon the value(4) of another
attribute(ColData/@colID).
Not exacly, you want to sort on element (DataRow) by it's child ColData,
that has an colID equal to 4, value attribute
So, you'll have to use <xsl:sort select="ColData[(_at_)colID=4]/@value"/>
The crux of my prb, as I see it, is that all the child
nodes of node 'DataRow' have the same bloody name (ColData).
Here is new test code: XSLT
(OK for the one ColData (@colID='4'),
but not all the ColData elements)
*****************************************
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="ReportRet">
<table>
<xsl:for-each select="//DataRow/ColData[(_at_)colID='4']">
// is very expensive, you'll mit just well use ReportData instead
you don't want ColData here. Here you are creating <tr>s, so change
this to
<xsl:for-each select="ReportData/DataRow">
<xsl:sort select="@value" data-type="text" />
here you use the sort mentioned before instead
<xsl:sort select="ColData[(_at_)colID=4]/@value"/>
<tr>
Now you'll build each <td>
<xsl:for-each select="ColData">
<td>
<xsl:value-of select="@value"/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
The actual code will look like:
<xsl:template match="ReportRet">
<table>
<xsl:for-each select="ReportData/DataRow">
<xsl:sort select="ColData[(_at_)colID=4]/@value"/>
<tr>
<xsl:for-each select="ColData">
<td>
<xsl:value-of select="@value"/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
(...)
You could also use templates, something like:
<xsl:template match="ReportRet">
<table>
<xsl:apply-templates select="ReportData"/>
</table>
</xsl:template>
<xsl:template match="ReportData">
<xsl:apply-templates select="DataRow">
<xsl:sort select="ColData[(_at_)colID=4]/@value"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="DataRow">
<tr>
<xsl:apply-templates select="ColData"/>
</tr>
</xsl:template>
<xsl:template match="ColData">
<td>
<xsl:value-of select="@value"/>
</td>
</xsl:template>
Both stylesheets applyied to your input data results on:
2003-07-23 29190087 Aegis Staffing Services, Inc. 2003-08-22 0 260.00
2003-07-01 70103 AMS Courier 2003-08-15 0 27.50
2003-08-01 93 Boulder CC 2003-09-01 0 70.00
2003-05-13 May03 Yellow Book USA 2003-06-12 56 285.00
Regards,
Americo Albuquerque
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list