----- Original Message -----
Sent: Thursday, June 14, 2001 5:48
PM
Subject: Parameter Sorting Problem With
Xalan
Hello,
I have been
banging my head against the wall trying to sort with a a parameter-based xsl
stylesheet. I have tried the suggestions posted in previous e-mails on this
subject as well as in articles on the Web, but I still can't get the sorting
to work. Basically, I am trying to take an xml file and convert it to another
xml file that is sorted based on a column and sort order that are
dynamically selected by the user. I pass the parameters for the column
name and sort order in as strings to the stylesheet using the
Tarsnformer's setParameter() method. The problem is that the stylesheet
always uses the default values for the column names and the
sort order, regardless of what I pass in as a parameter. Any help would be
GREATLY appreciated.
Rechell
Schwartz
Here is the code for how I set the
parameters:
public void
sortXSL(String sortParameter, String sortOrder) throws TransformerException,
TransformerConfigurationException, FileNotFoundException
{
TransformerFactory tFactory =
TransformerFactory.newInstance();
String
xsl =
"c:\\directoryname\\xmlStyleSheet.xsl";
Transformer transformer = tFactory.newTransformer(new
StreamSource(xsl));
DOMResult domResult =
new DOMResult();
transformer.setParameter("sortcolumn",
sortParameter.trim().toUpperCase());
transformer.setParameter("sortorder",
sortOrder);
transformer.transform(new DOMSource(document),
domResult);
document =
(Document)domResult.getNode();
}
Here
is the xsl stylesheet:
<xsl:template
match="xml">
<xml>
<data>
<xsl:apply-templates/>
</data>
</xml>
</xsl:template>
<xsl:template
match="data">
<xsl:param name="sortcolumn"
select="'COLUMN1'"/>
<xsl:param name="sortorder"
select="'ascending'"/>
<xsl:apply-templates
select="row">
<xsl:sort order="{$sortorder}"
data-type="text"
select="*[name()=$sortcolumn]"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template
match="row">
<xsl:copy-of
select="."/>
</xsl:template>
<xsl:template
match="columntype">
<xsl:copy-of
select="."/>
</xsl:template>
<xsl:template
match="truncated">
<xsl:copy-of
select="."/>
</xsl:template>
<xsl:template
match="truncationsize">
<xsl:copy-of
select="."/>
</xsl:template>
</xsl:stylesheet>
Finally, here is the xml file that is inputted to the
stylesheet:
<xml>
<data>
<row>
<COLUMN1>ABC</COLUMN1><COLUMN2>ABC2</COLUMN2>
</row>
<row>
<COLUMN1>GHI</COLUMN1><COLUMN2>GHI2</COLUMN2>
</row>
<row>
<COLUMN1>DEF</COLUMN1><COLUMN2>DEF2</COLUMN2>
</row>
<columntype><COLUMN1>string</COLUMN1><COLUMN2>string</COLUMN2>
<truncated>no</truncated>
<truncationsize>1000</truncationsize>
</data>
</xml>