I've spent most of the day today trudging through various search engines, FAQs,
mailing list archives and the Cocoon-2 site, but I still seem to be missing something
critical in getting something that seems simple working.
The problem revolves around how to efficiently use request parameters to choose a SQL
resultset column to sort by in my stylesheet.
I've got the following in sitemap.xmap:
<map:match pattern="sql/*">
<map:generate src="docs/samples/sql/{1}.xml"/>
<map:transform type="sql">
<map:parameter name="use-connection" value="testdb"/>
</map:transform>
<map:transform src="stylesheets/employees.xsl">
<map:parameter name="use-request-parameters" value="true"/>
</map:transform>
<map:serialize/>
</map:match>
I should mention that the XSLT transformer is also modified to turn on request
parameters.
The SQL xml document looks like:
<?xml version="1.0"?>
<page xmlns:sql="http://apache.org/cocoon/SQL/2.0">
<title>Employees</title>
<content>
<execute-query xmlns="http://apache.org/cocoon/SQL/2.0">
<query>
select emid, emfname, emlname from employee
</query>
</execute-query>
</content>
</page>
Both are nearly stock from the Cocoon distribution and seem to work just fine (that
is, the output is what I would expect to see).
My problem comes in attempting to take that resultset and process it in the
stylesheet. Ideally, I'd like to create a single stylesheet that would use the HTTP
request parameter order_by as the sort-by column. My XSL looks like this (including
just the relevant template):
<xsl:template match="sql:rowset">
<xsl:param name="order_by"/>
<table border="0" width="100%">
<tr bgcolor="aaccee" align="left">
<th><a href="?order_by=sql:emid">Employee ID</a></th>
<th><a href="?order_by=sql:emfname">First Name</a></th>
<th><a href="?order_by=sql:emlname">Last Name</a></th>
</tr>
<xsl:for-each select="sql:row">
<xsl:sort select="$order_by"/>
<tr>
<xsl:attribute name="bgcolor">
<xsl:choose>
<xsl:when test="position() mod
2 = 0">
<xsl:text>white</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:attribute>
<xsl:apply-templates/>
</tr>
</xsl:for-each>
</table>
</xsl:template>
It appears to me that $order_by DOES hold the value that I'm interested in, since I
can include:
<td><xsl:value-of select="$order_by"/></td>
just after the <xsl:apply-templates/> and get the expected value in that column.
The mailing list archives mentioned something similar to "*[name()=$order_by]" as
being a working answer, but it doesn't seem to have any affect upon the output in this
situation.
With my limited knowledge of Cocoon and XSL, I'm not sure where to go from here. I
have tested using URI path extensions (e.g. /sql/sql-page/ByID) and choosing the
stylesheet in sitemap.xmap based on that, and that seems to work, but it would work
out to be a maintenance nightmare holding onto stylesheets for each possible sortable
column in each page.
If I want to use request parameters, are XSPs my only option?
What (obvious, I'm quite sure) options do I have at this point?
Thank you for any help or pointers anyone can offer,
--
Steve Philp
Advance Packaging Corporation
[EMAIL PROTECTED]
---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faqs.html>
To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>