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

[xsl] Passing sort parameter as a hard-coded string


Subject: [xsl] Passing sort parameter as a hard-coded string
From: Maria Amuchastegui <mamuchastegui@xxxxxxxxxxx>
Date: Tue, 5 Apr 2005 15:52:34 -0400

I have a single .xhtml file that contains an embedded XML data island and an
embedded XSL stylesheet. A Javascript function, sortXML(), transforms the
data using sort parameters passed to the stylesheet, and toggles between
ascending and descending sort orders. I had to rewrite sortXML() so that it
passes the column parameter as a hard-coded string instead of picking it up
from the innerHTML, and now the sort functionality isn't working. I don't
understand why the sort it isn't working any more.

<html xmlns=" <http://www.w3.org/1999/xhtml> http://www.w3.org/1999/xhtml"
xml:lang="en">
     <head>
          <script language="JavaScript">
//<![CDATA[
var arrSort = new
<http://www.experts-exchange.com/Web/Web_Languages/JavaScript/Q_21377372.htm
l#> Array();
arrSort["id"] = "ascending";
arrSort["date"] = "ascending";
arrSort["location"] = "ascending";
arrSort["number"] = "ascending";
arrSort["charges"] = "ascending";
arrSort["savings"] = "ascending";
arrSort["amount"] = "ascending";
function sortXML(column)
{
var column = "id";
var order = "ascending";

//if(theLink)
//     {
//     column = theLink.innerHTML.toLowerCase();

     if (arrSort[column] == 'ascending')
          {
          order = 'descending';
          } 
     else 
          {
          order = 'ascending';
          }
     arrSort[column] = order;
     showArrow(column);
//     }    

if (document.implementation && document.implementation.createDocument) //
Netscape
     {
     var xslDoc;
     var xsltProcessor = new XSLTProcessor();
     var myDOM;
     var xmlDoc;
     var xslDoc = document.implementation.createDocument("", "", null);
     var myXSLNode = document.getElementById("myXSLStylesheet");
     var clonedXSLNode = xslDoc.importNode(myXSLNode.childNodes.item(1),
true);
     xslDoc.appendChild(clonedXSLNode);     
     xsltProcessor.importStylesheet(xslDoc);     
     var xmlDoc = document.implementation.createDocument("", "", null);
     var myNode = document.getElementById("myXMLData");
     var clonedNode = xmlDoc.importNode(myNode.childNodes.item(1), true);
     xmlDoc.appendChild(clonedNode);
     xsltProcessor.setParameter(null, "sortKey", column);
     xsltProcessor.setParameter(null, "sortOrder", order);
     var fragment = xsltProcessor.transformToFragment(xmlDoc,document);
     var containerElement = document.getElementById("ChargeableMessages");
     while (containerElement.hasChildNodes()) 
          {
          containerElement.removeChild(containerElement.lastChild);
          }
     myDOM = fragment;
     document.getElementById("ChargeableMessages").appendChild(fragment);

     }
else if (window.ActiveXObject) // Internet Explorer
     {
     var xslDoc=new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
     var rsltDoc=new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
     var xslTemplate=new ActiveXObject("MSXML2.XSLTemplate");
     xslDoc.load(myXSLStylesheet.XMLDocument);
     xslTemplate.stylesheet=xslDoc;
     var xslProc=xslTemplate.createProcessor();
     xslProc.input=myXMLData.XMLDocument;
     xslProc.addParameter("sortKey", column);
     xslProc.addParameter("sortOrder", order);
     xslProc.transform();
     ChargeableMessages.innerHTML = xslProc.output;      
     return false;
     }
else
     {
     alert('Your browser does not support client-side XSL
transformations.'); // unsupported browser
     }
return false;
}

var Columns = new Array('id', 'date', 'location',  'number', 'duration',
'charges');

function showArrow(column)
{
     for (var loop = 0; loop < Columns.length; loop++)
     {
     var currColumnName = Columns[loop];
     var counter = 1;
     while(document.getElementById(currColumnName+'Arrow'+counter)){
          var currentArrow =
document.getElementById(currColumnName+'Arrow'+counter);
          currentArrow.style.visibility = "hidden";  
          counter++;
          } 
     }
     var activeColumn = column;
     var counter = 1;  
     while(document.getElementById(activeColumn+'Arrow'+counter)){
          var activeArrow =
document.getElementById(activeColumn+'Arrow'+counter);
          if(activeArrow.className == 'ascArrow')
               {
               activeArrow.className = 'descArrow';
               activeArrow.style.visibility = "visible";                   
               }
          else 
               {
               activeArrow.className = 'ascArrow';
               activeArrow.style.visibility = "visible"; 
               }    
          counter++;
          }
}

//]]></script>

<style>
.ascArrow
{
background: #ffffff
<http://www.experts-exchange.com/Web/Web_Languages/JavaScript/Q_21377372.htm
l#> url(images/asc.gif) no-repeat;
width: 8px;
height: 4px;
}
.descArrow
{
background: #ffffff url(images/desc.gif) no-repeat;
width: 8px;
height: 4px;
}
</style>
          <title>Bell proof of concept</title>
     </head>
     <body onload="sortXML();">
          <div id="ChargeableMessages">
<!-- display Chargeable Messages section here -->          
          </div>
          <xml id="myXMLData" style="display:none;">
               <myXMLData xmlns="">
                    <BTN number="635 5669">
                         <Section number="400" type="Detail" subHead1="Long
distance calls" subHead2="">
                              <ServiceHeader group="">
                                   <message>
                                        <id>1-01</id>
                                        <date>2005-04-23</date>
                                        <location>Quebec QC</location>
                                        <number>418 683 1234</number>
                                        <duration>1</duration>
                                        <charges>0.43</charges>
                                        <savings>.043</savings>
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-02</id>
                                        <date>2005-04-28</date>
                                        <location>Montreal QC</location>
                                        <number>514 485 6611</number>
                                        <duration>2</duration>
                                        <charges>3.44</charges>
                                        <savings />
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-03</id>
                                        <date>2005-05-01</date>
                                        <location>Winnipeg MB</location>
                                        <number>204 475 4565</number>
                                        <duration>22</duration>
                                        <charges>0.55</charges>
                                        <savings />
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-04</id>
                                        <date>2005-04-01</date>
                                        <location>Victoria BC</location>
                                        <number>250 361 9433</number>
                                        <duration>40</duration>
                                        <charges>7.42</charges>
                                        <savings />
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-05</id>
                                        <date>2005-04-18</date>
                                        <location>St Jovite QC</location>
                                        <number>819 425 3221</number>
                                        <duration>2</duration>
                                        <charges>0.68</charges>
                                        <savings />
                                        <amount />
                                   </message>
                              </ServiceHeader>
                         </Section>
                         <SummarySection number="420" type="Summary">
          
          </SummarySection>
                         <Section number="430c" type="Detail"
subHead1="Advantage Per Call" subHead2="">
                              <ServiceHeader group="Canada">
                                   <message>
                                        <id>1-06</id>
                                        <date>2005-05-06</date>
                                        <location>Collingwood ON</location>
                                        <number>705 445 1030</number>
                                        <duration>1.4</duration>
                                        <charges>5.01</charges>
                                        <savings />
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-07</id>
                                        <date>2005-04-12</date>
                                        <location>Erin ON</location>
                                        <number>519 833 2380</number>
                                        <duration>1.1</duration>
                                        <charges>0.78</charges>
                                        <savings />
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-08</id>
                                        <date>2005-04-09</date>
                                        <location>Barrie ON</location>
                                        <number>705 726 4242</number>
                                        <duration>.5</duration>
                                        <charges>0.47</charges>
                                        <savings />
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-09</id>
                                        <date>2005-05-09</date>
                                        <location>Longueuil QC</location>
                                        <number>450 463 7180</number>
                                        <duration>1.6</duration>
                                        <charges>0.69</charges>
                                        <savings />
                                        <amount />
                                   </message>
                              </ServiceHeader>
                              <ServiceHeader group="United States">
                                   <message>
                                        <id>1-10</id>
                                        <date>2005-05-10</date>
                                        <location>Folsom CA</location>
                                        <number>916 355 7200</number>
                                        <duration>2.4</duration>
                                        <charges>2.54</charges>
                                        <savings />
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-11</id>
                                        <date>2005-04-04</date>
                                        <location>Burlington MA</location>
                                        <number>781 270 1695</number>
                                        <duration>6</duration>
                                        <charges>10.35</charges>
                                        <savings />
                                        <amount />
                                   </message>
                              </ServiceHeader>
                         </Section>
                         <SummarySection number="450c" type="Summary"
subHead1="" subHead2="">
          
          </SummarySection>
                    </BTN>
                    <BTN number="635 5670">
                         <Section number="400" type="Detail" subHead1="Long
distance calls" subHead2="">
                              <ServiceHeader group="">
                                   <message>
                                        <id>1-12</id>
                                        <date>2005-04-08</date>
                                        <location>Edmonton AB</location>
                                        <number>780 496 8200</number>
                                        <duration>3</duration>
                                        <charges>0.25</charges>
                                        <savings />
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-13</id>
                                        <date>2005-04-15</date>
                                        <location>Halifax NS</location>
                                        <number>902 490 6277</number>
                                        <duration>5</duration>
                                        <charges>1.01</charges>
                                        <savings />
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-14</id>
                                        <date>2005-04-30</date>
                                        <location>Sudbury ON</location>
                                        <number>705 671 2489</number>
                                        <duration>33</duration>
                                        <charges>3.55</charges>
                                        <savings />
                                        <amount />
                                   </message>
                                   <message>
                                        <id>1-15</id>
                                        <date>2005-05-07</date>
                                        <location>Sault Ste Marie
ON</location>
                                        <number>705 254 6060</number>
                                        <duration>50</duration>
                                        <charges>5.66</charges>
                                        <savings />
                                        <amount />
                                   </message>
                              </ServiceHeader>
                         </Section>
                         <SummarySection number="420" type="Summary">
          
          </SummarySection>
                    </BTN>
               </myXMLData>
          </xml>
          <xml id="myXSLStylesheet" style="display:none;">
               <xsl:stylesheet xmlns:xsl="
<http://www.w3.org/1999/XSL/Transform> http://www.w3.org/1999/XSL/Transform"
version="1.0">
                    <xsl:output method="html" />
                    <xsl:param name="sortKey" />
                    <xsl:param name="sortOrder" />
                    <xsl:template match="/">
                         <xsl:apply-templates select="myXMLData" />
                    </xsl:template>
                    <xsl:template match="myXMLData">
                         <xsl:apply-templates select="//BTN" />
                    </xsl:template>
                    <xsl:template match="//BTN">
                         <b><xsl:value-of select="@number" /></b>
                         <xsl:for-each select="Section[@type='Detail']">
                              <table border="1">
                                   <th colspan="6" align="left">
                                        <xsl:value-of select="@subHead1" />
- click on any column to sort
                                   </th>
                                   <tr>
                                        <th>
                                             <a href="#" onclick="return
sortXML('id');">ID
                                             <span class="ascArrow"
style="visibility:visible;">
                                             <xsl:attribute
name="id"><xsl:value-of select="'idArrow'" /><xsl:number
level="any"/></xsl:attribute>
                                             <xsl:text>  </xsl:text>
                                             </span>

                                             </a>
                                        </th>
                                        <th>
                                             <a href="#" onclick="return
sortXML('date');">Date
                                             <span class="ascArrow"
style="visibility:hidden;">
                                             <xsl:attribute
name="id"><xsl:value-of select="'dateArrow'" /><xsl:number
level="any"/></xsl:attribute>
                                             <xsl:text>  </xsl:text>
                                             </span>

                                             </a>
                                        </th>
                                        <th>
                                             <a href="#" onclick="return
sortXML('location');">Location
                                             <span class="ascArrow"
style="visibility:hidden;">
                                             <xsl:attribute
name="id"><xsl:value-of select="'locationArrow'" /><xsl:number
level="any"/></xsl:attribute>
                                             <xsl:text>  </xsl:text>
                                             </span>
                                             </a>
                                        </th>
                                        <th>
                                             <a href="#" onclick="return
sortXML('number');">Number
                                             <span class="ascArrow"
style="visibility:hidden;">
                                             <xsl:attribute
name="id"><xsl:value-of select="'numberArrow'" /><xsl:number
level="any"/></xsl:attribute>
                                             <xsl:text>  </xsl:text>
                                             </span>

                                             </a>
                                        </th>
                                        <th>
                                             <a href="#" onclick="return
sortXML('duration');">Duration
                                             <span class="ascArrow"
style="visibility:hidden;">
                                             <xsl:attribute
name="id"><xsl:value-of select="'durationArrow'" /><xsl:number
level="any"/></xsl:attribute>
                                             <xsl:text>  </xsl:text>
                                             </span>

                                             </a>
                                        </th>
                                        <th>
                                             <a href="#" onclick="return
sortXML('charges');">Charges
                                             <span class="ascArrow"
style="visibility:hidden;">
                                             <xsl:attribute
name="id"><xsl:value-of select="'chargesArrow'" /><xsl:number
level="any"/></xsl:attribute>
                                             <xsl:text>  </xsl:text>
                                             </span>

                                             </a>
                                        </th>
                                   </tr>
                                   <xsl:apply-templates
select="ServiceHeader" />
                              </table>
                              <br />
                         </xsl:for-each>
                    </xsl:template>
                    <xsl:template match="ServiceHeader">
                         <xsl:if test="@group != '' ">
                              <tr>
                                   <td colspan="6">
                                        <xsl:value-of select="@group" />
                                   </td>
                              </tr>
                         </xsl:if>
                         <xsl:choose>
                              <xsl:when test="($sortKey = 'duration') or
($sortKey = 'charges')">
                                   <xsl:apply-templates select="message">
                                        <xsl:sort select="*[name() =
$sortKey]" order="{$sortOrder}" data-type="number" />
                                   </xsl:apply-templates>
                              </xsl:when>
                              <xsl:otherwise>
                                   <xsl:apply-templates select="message">
                                        <xsl:sort select="*[name() =
$sortKey]" order="{$sortOrder}" data-type="text" />
                                   </xsl:apply-templates>
                              </xsl:otherwise>
                         </xsl:choose>
                    </xsl:template>
                    <xsl:template match="message">
                         <tr>
                              <td>
                                   <xsl:value-of select="id" />
                              </td>
                              <td>
                                   <xsl:value-of select="date" />
                              </td>
                              <td>
                                   <xsl:value-of select="location" />
                              </td>
                              <td>
                                   <xsl:value-of select="number" />
                              </td>
                              <td>
                                   <xsl:value-of select="duration" />
                              </td>
                              <td>
                                   <xsl:value-of select="charges" />
                              </td>
                         </tr>
                    </xsl:template>
               </xsl:stylesheet>
          </xml>
     </body>
</html> 


Current Thread
Keywords