[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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] RE: problem using last(), Michael Kay | Thread | RE: [xsl] Passing sort parameter as, Maria Amuchastegui |
Re: [xsl] xsl formating string, josh higgins | Date | Re: [xsl] xsl formating string, Brian Chrisman |
Month |